我需要一些帮助,使用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私有方法。
由于我不熟悉编写测试并需要帮助,所以任何帮助都会很棒。
答案 0 :(得分:3)
您想要的是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();
}
答案 1 :(得分:0)
虽然没有直接回答你关于如何使用Rhino的问题(看起来Jon已经做了相当不错的工作),为了后人,我将展示如何使用手动模拟来测试它。 (忍受我,自从我做完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
。
希望有所帮助!
布兰登