Rhino Mocks AssertWasCalled (multiple times) on property getter using AAA

試著忘記壹切 提交于 2019-11-30 07:48:46

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.AtLeastOnce());

Repeat.Any does not work with AssertWasCalled because 0 counts as any... so if it WASN'T called, the AsserWasCalled would return TRUE even if it wasn't called.

I agree with chris answer

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.AtLeastOnce());

Additionally If you know exactly how many times the property would be called you can do

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.Times(n));

where n is an int.

What is your motivation behind checking the number of times it is called? Is it a particularly expensive operation? If so, then I would suggest that you put it behind a method instead as, semantically speaking, properties should be inexpensive calls.

Also, checking the number of times a property is called is not the thrust of unit testing (don't worry it's a common mistake to test too much, we've all been there). What you should really be testing is that given the state of your mock object that the method produces the expected output. The number of times a method is called to do that doesn't really matter (unless it's a service to send an email or something). It is an implementation detail which you normally wouldn't test as a simple refactor would break your tests as they would be too specific.

Depending on your version of Rhino you are using, you can use:

// Call to mock object here
LastCall.IgnoreArguments().Repeat.Never();

newContact.Expect( c => c.ForeNames ).Return( ... ).Repeat.Any()

From Here:

mock.AssertWasCalled(x => x.Name ="Bob");

or

mock.AssertWasCalled(x => x.Name =Arg.Is("Bob"));

or

mock.AssertWasCalled(x => x.Name =Arg<string>.Is.NotNull);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!