By default, FakeItEasy's fakes support what is sometimes called "loose mocking". This means that calls to any of the fake's members are allowed, even if they haven't been configured.
However, FakeItEasy also supports strict fakes, in which all calls to
unconfigured members are rejected, throwing an
ExpectationException. Strict fakes are created by supplying a
var foo = A.Fake<IFoo>(x => x.Strict());
After you have configured your fake in this fashion you can configure any "allowed" calls as usual, for example:
A.CallTo(() => foo.Bar()).Returns("bar");
Strict fakes are useful when it is important to ensure that no calls are made to your fake other than the ones you are expecting.
It can sometimes be inconvenient that all methods throw an exception
if not configured. You might want to allow calls to methods inherited
they're used all the time, often implicitly, and in most cases there's
no real value in configuring them manually.
To achieve this, pass a
StrictFakeOptions value to the
method when you create the fake:
// Allow calls to all object methods var foo = A.Fake<IFoo>(x => x.Strict(StrictFakeOptions.AllowObjectMethods)); // Allow calls to ToString var foo = A.Fake<IFoo>(x => x.Strict(StrictFakeOptions.AllowToString)); // Allow calls to Equals and GetHashCode var foo = A.Fake<IFoo>(x => x.Strict(StrictFakeOptions.AllowEquals | StrictFakeOptions.AllowGetHashCode));