验证是否在模拟类中调用了方法

时间:2013-01-30 17:27:55

标签: c# unit-testing mocking rhino-mocks

如果我们有这样的事情:

public class test
   {
       public void Condition()
       {
           if (x == y)
           {
               methodOne();
           }
           else
           {
               methodTwo();
           }
       }
   }

如何使用Rhino Mock编写单元测试来断言methodOne是否被调用?

2 个答案:

答案 0 :(得分:3)

您通常不会为您正在测试的类创建模拟。您为其依赖项创建了模拟。

所以,如果您的代码实际上是:

public class Test
{
    private readonly IFoo foo;

    public Test(IFoo foo)
    {
        this.foo = foo;
    }

    public void Condition()
    {
        if (x == y)
        {
           foo.MethodOne();
        }
        else
        {
            foo.MethodTwo();
        }
    }
}

...然后为IFoo创建一个模拟是有意义的,并将其传递给您测试的Test实例。

虽然部分模拟可能允许您测试同一类中的方法是否被调用,但我通常会避开它。测试您是否可以看到调用MethodOneMethodTwo效果

答案 1 :(得分:0)

您可以将MethadOne用作虚拟方法:

public virtual void MethodOne()
{
}

并使用部分模拟:

MockRepository mock = new MockRepository();

var mockTest = mock.PartialMock<Test>();
mockTest.Expect(m => m.MethodOne());

mock.ReplayAll();
mock.VerifyAll();