Unit Testing Mock/Stub definitions in Moq

人走茶凉 提交于 2019-12-03 06:32:44

According to the Moq project site, Moq provides:

Granular control over mock behavior with a simple MockBehavior enumeration (no need to learn what's the theoretical difference between a mock, a stub, a fake, a dynamic mock, etc.)

The lack of distinction between mocks, stubs, and such is a deliberate design decision; A design decision which I, for one, prefer. If I need a true mock, I call Verify() on it. If not, there's no Verify(). I like the simplicity, and I haven't found myself missing the distinction between mock and stub.

Martin Fowler wrote a good article, Mocks Aren't Stubs, which I think makes the distinction clear.

Mocks are used for behavior verification, while stubs supply fake data and normally participate in state verification.

imho its just that its kind of a silly discussion.

What matters is that you use the mocks/stubs to assert what you need to in the test, and don't assert what you don't.

Indeed, Moq can create true stubs. From the Moq Quick Start page:

* Setup a property so that it will automatically start tracking its value (also known as Stub):

  // start "tracking" sets/gets to this property
  mock.SetupProperty(f => f.Name);

  // alternatively, provide a default value for the stubbed property
  mock.SetupProperty(f => f.Name, "foo");


  // Now you can do:

  IFoo foo = mock.Object;
  // Initial value was stored
  Assert.Equal("foo", foo.Name);

  // New value set which changes the initial value
  foo.Name = "bar";
  Assert.Equal("bar", foo.Name);

* Stub all properties on a mock (not available on Silverlight):

  mock.SetupAllProperties();

IMHO, the distinctions between flavors of fakes is best thought of as a distinction between functions of those fakes rather than types of fakes, as a fake may take on multiple roles at once (e.g. can be a true mock and a saboteur all at once), and as no such distinction is necessary for using a mock framework. (I should blog about this!)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!