0

如果我们有这样的事情:

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

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

4

2 回答 2

4

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

因此,如果您的代码实际上是:

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...然后创建一个模拟 for并将其传递给Test您测试的实例是有意义的。

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

于 2013-01-30T17:35:27.653 回答
0

您可以利用 MethodOne 作为虚拟方法:

public virtual void MethodOne()
{
}

并使用部分模拟:

MockRepository mock = new MockRepository();

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

mock.ReplayAll();
mock.VerifyAll();
于 2013-01-30T17:48:35.137 回答