我在我已使用犀牛制品嘲笑的接口的属性。我想知道,如果它是在我的单元测试访问。

有一种方法,以查看是否该属性经由犀牛制品访问?

我发现这个代码这里但它似乎不工作:

string name = customerMock.Name;
customerMock.AssertWasCalled(x => {var ignored = x.Name;});

我再现这个代码和我得到以下:

Rhino.Mocks.Exceptions.ExpectationViolationException: IAddAddressForm.get_FirstName(); Expected #1, Actual #0..

我想用这个语法,但我必须失去了一些东西。我有一个存根(而不是模拟)调用它并有所作为?

有帮助吗?

解决方案 2

原来我用不工作的语法。但是,只有当财产PropertyBehavior模式不工作。 (这是存根默认和可开启嘲笑)。

在PropertyBehavior模式被导通,则该语法不起作用。根据 Ayende 你必须检查在该点的值。

其他提示

  

有没有办法,看看属性   经由犀牛制品被访问?

是。您可以设置该属性的期望。如果验证不抛出,那么你就知道该属性被访问:

var mocks = new MockRepository();
IFoo foo = mocks.DynamicMock<IFoo>;
// this sets up an expectation that Name is accessed, and what it should return
Expect.Call(foo.Name).Return("John Doe"); 
mocks.ReplayAll()

// test something that uses IFoo here ...

mocks.VerifyAll();  // Throws if foo.Name was not accessed after ReplayAll()

这是所有假设你要访问foo.Name。如果你的目标是验证它的不可以访问,那么你应该只使用StrictMock代替DynamicMock。严格的模拟将抛出任何意外的呼叫。

如果你想断定方法被调用或伪造的对象上访问的属性,你应该总是使用一个模拟。存根用于在您不想要测试的互动这些情况,但只是想确保一些对象的调用返回一个特定值,使逻辑流程。

我相信StrictMock就是你所期待的。有一个关于它这里一些信息。它的使用被认为是气馁,因为它可以使测试太脆,但它应该可以帮助你实现你想要做什么。

可以使用StackFrame类检查调用堆栈。不是很干净,但它应该得到期望的结果...

我通常使用起订量它采用城堡,所以你可能会考虑它,而不是/与犀牛制品一起。这是你如何能做到这有:

// expects an invocation to set the value to "foo"
mock.SetupSet(foo => foo.Name = "foo");

// or verify the setter directly
mock.VerifySet(foo => foo.Name = "foo");
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top