The differences are explained in this article
If you create no expectations on a StrictMock
, and a method gets called on the mock, an exception will be thrown.
If you create no expectations on a PartialMock
, and a method gets called on the mock, nothing special happens. If that mock derives from a base class, the call bleeds through to the existing base implementation.
There is also something called a DynamicMock
. If you create no expectations on a DynamicMock
, and a method gets called on the mock, a stub method is called. If there was a return value, a default value (e.g. null
or 0
) is returned.
GenerateMock
I believe creates a DynamicMock
.
Ayende chose this default because he recommends an ideal of only using DynamicMock
and Stub
. StrictMock
creates brittle tests, and usually violates the concept of only verifying one behavior per test.
See this article: http://ayende.com/wiki/Rhino%20Mocks%203.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictMockisdiscouraged
I've also seen him say that it is useful to start with strict mocks, and work your tests back down to dynamic mocks/stubs once you're comfortable with how your code-under-test is behaving. No link for that tho :)