Den*_*dic 4 .net c# tdd rhino-mocks mocking
我正在寻找一种让我的测试更清晰的方法,这就是问题所在:
public interface A
{
}
public interface B
{
A GetA();
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我想在B上使用存根,并且每次调用GetA时都需要一个新实例,我会这样做:
[Test]
public void TestName()
{
MockRepository mockery = new MockRepository();
B b = mockery.Stub<B>();
b.Stub(x => x.GetA()).Return(mockery.Stub<A>()).Repeat.Once();
b.Stub(x => x.GetA()).Return(mockery.Stub<A>()).Repeat.Once();
mockery.ReplayAll();
Assert.IsFalse(ReferenceEquals(b.GetA(), b.GetA()));
}
Run Code Online (Sandbox Code Playgroud)
请注意,在断言中我调用GetA两次,并且我将结果设置为Repeat.Once()而不是Repeat.Twice();
如果您运行此测试,它将通过,因为实例不同.然而,我没有发现这种代码非常清楚.你如何让Rhino Mocks在每次通话时产生新的实例?
注意:在过去,我使用Do()执行一些更改实例等的代码,在每次返回时都使用了很多技巧,但是有类似.GenerateNewInstance()之类的东西吗?
[Test]
public void TestName()
{
var b = MockRepository.GenerateStub<B>();
b.Stub(x => x.GetA())
.WhenCalled(x => x.ReturnValue = MockRepository.GenerateStub<A>());
Assert.IsFalse(ReferenceEquals(b.GetA(), b.GetA()));
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,您必须显式添加.Return()
调用,但如果ReturnValue
在WhenCalled
delegate参数中设置,则将覆盖该值.
归档时间: |
|
查看次数: |
2414 次 |
最近记录: |