协助编写单元测试与犀牛模拟的方法
我需要一些帮助,为使用Rhino Mocks 3.5的以下课程编写单元测试。在我的课下overrided方法:协助编写单元测试与犀牛模拟的方法
public override void Initialize(params object[] messages)
{
var data = new ViewData
{
Name = this.GetName()
};
this.Notify(data);
}
我想编写一个测试来验证,当初始化方法被调用时,方法调用的通知方法,具有类型的ViewData的参数。另外我想检查一下这个方法中调用的是一个私有方法的GetName方法。我使用访问者来访问GetName私有方法。
,因为我是新来编写测试和需要帮助任何帮助将是巨大的与此有关。
你想要什么叫做partial mock。
[Test]
public void UsingPartialMocks()
{
MockRepository mocks = new MockRepository();
YourClass partialMock = mocks.PartialMock<YourClass>();
Expect.Call(partialMock.Notify(null)).IgnoreArguments();
mocks.ReplayAll();
partialMock.Initialize(null);
mocks.VerifyAll();
}
感谢您的帮助乔恩,但当我尝试上述我得到的错误:无效的调用,最后的调用已被使用或没有调用(确保您调用虚拟(C#)/ Overridable(VB)方法)。 notify方法不是在被测试的类中实现的,而是在由我正在测试的类继承的基类中实现的。任何想法可能是什么问题? – amateur
您可以尝试使用lambda语法 - 请参阅http://*.com/questions/1301116/rhino-mocks-error-invalid-call-the-last-call-has-been-used-or-no-call- has-be –
我将上面的行更改为Expect.Call(()=> partialMock.Notify(null))。IgnoreArguments();但仍然遇到同样的错误 - 任何想法? – amateur
虽然没有直接回答你关于如何使用犀牛做的问题(似乎乔恩在这个已经做了体面的工作),为子孙后代着想,我会告诉我如何使用手动嘲讽测试。 (多多包涵,它已经有一段时间,因为我做了C#,所以原谅了语法错误)
[Test]
public void initializeRegistersViewDataWithGivenName()
{
ShuntedYourClass yourClass = new ShuntedYourClass();
yourClass.initialize(/* arg list */);
// Verify 'Notify' was called
Assert.NotNull(yourClass.registeredViewData);
// Verify 'GetName' private method was invoked and
// 'Name' was properly populated
Assert.AreEqual("expected name", yourClass.registeredViewData.Name);
}
// Nested class for testing purposes only.
class ShuntedYourClass : public YourClass
{
public ViewData registeredViewData;
public override void Notify(ViewData vd)
{
this.registeredViewData = vd;
}
}
此代码现在验证Initialize
方法确实正常工作和执行Notify
用适当的参数。
希望有帮助!
Brandon
'Notify()'做了什么方法?它是否以某种方式访问在此类中注入的其他类? – sll
GetName()和Notify()是什么签名?如果Notify只接受ViewData,则不需要编写单元测试来验证该参数的类型为ViewData - .NET将在编译时为您执行该操作。 – PatrickSteele