I am new to Moq and I just watched the pluralsight video on Moqing so I felt empowered to go and write some tests. I have a Base Class let’s say Sheet which implements an in
Moq is for imitating a dependency or dependencies of your system under test so that you can isolate that from the rest of your application or externalities, not for replacing your system under test. It's not the right tool for what you are trying to do here.
If you change
var MockSheet = new Moq<Page>();
into
var MockSheet = new Moq<Page> { CallBase = true, };
your mock (which you can think of as a derived class of Page
) will call the implementation from Page
in the mock's own override of CreateSheet
.
The default behavior (if you do not change CallBase
) is for Moq to override every method and property it can, and use an empty implementation. Setting CallBase
to true
makes Moq call the Page
implementation instead, like I said.
(Of course, use MockSheet.Setup(x => x.CreateDocSheet()).Callback(() => { /* something */ })
if you want CreateDocSheet
to do something non-trivial.)
In the case where you removed the virtual
modifier from CreateSheet
, Moq can no longer override or mock this member. Think of it: How could Moq "mock" a non-virtual method? Therefore, the call bypasses Moq's class completely.