我需要一些帮助,使用Rhino Mocks 3.5为下面的类编写单元测试。下面的重写方法在我的类中:
public override void Initialize(params object[] messages)
{
var data = new ViewData
{
Name = this.GetName()
};
this.Notify(data);
}
我想写一个测试来验证,当Initialize方法被调用时,该方法调用Notify方法并有一个ViewData类型的参数。我还想检查GetName方法它是一个私有方法在这个方法中被调用。我使用一个访问器来访问GetName私有方法。
任何帮助将是伟大的,因为我是新的编写测试,需要帮助。
您所需要的称为部分模拟。
[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();
}
虽然不直接回答您关于如何使用Rhino来做这件事的问题(看起来Jon已经在这方面做得很好了),但是为了子孙后代,我将展示如何使用手动mock来测试它。(请原谅我,我已经有一段时间没有使用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
。
希望有帮助!
布兰登