帮助用rhino模拟编写方法的单元测试

本文关键字:方法 单元测试 rhino 模拟 帮助 | 更新日期: 2023-09-27 18:15:51

我需要一些帮助,使用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私有方法。

任何帮助将是伟大的,因为我是新的编写测试,需要帮助。

帮助用rhino模拟编写方法的单元测试

您所需要的称为部分模拟。

[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

希望有帮助!

布兰登