Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can you explain difference between StrictMock and Partialmock?

As I am using RhinoMocks version 3.6 and as I am not using Record-Replay and as I do not call Verify methods for asserting on mocks;

Can you explain what is the difference between very simply?

MockRepository.GenerateMock()
MockRepository.GeneratePartialMock()
MockRepository.GenerateStrictMock()

Note: I use .GenerateMock all the time to create my mocks and I assert method calls by providing arguments expectation already.

like image 638
pencilCake Avatar asked Oct 20 '11 05:10

pencilCake


1 Answers

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 :)

like image 113
Merlyn Morgan-Graham Avatar answered Nov 14 '22 17:11

Merlyn Morgan-Graham