2

我有这样的课:

public class ClassA
{
    public bool MethodA()
    {
      //do something complicated to test requiring a lot of setup
    }
    public bool MethodB()
    {
         if (MethodA())
             //do something
         else
             //do something else
         endif
    }
}

我对 MethodA 进行了测试,并想测试 MethodB,但我想做的只是验证 MethodA 是否返回 true 是否发生了某些事情,如果 MethodA 返回 false 是否发生了其他事情。我可以用 Rhino Mocks 做到这一点吗?或者我是否必须设置我在 MethodA 测试中已经拥有的所有相同的模拟?

4

2 回答 2

1

很难说这在没有上下文的情况下是否可行,但是一种解决方案可以将 MethodA() 提取到它自己的类中,这样您就可以让 MethodB() 在模拟对象上调用 MethodA() ,这将作为您的单元测试愿望.

另一种可能性是在您的单元测试中继承 ClassA 并覆盖 MethodA() 以根据您的单元测试返回 true 或 false。

//--- pseudo-code 
public ClassAMethodAReturnTrue : public ClassA { 
  public bool MethodA() { return true; } 

  ...

然后在您的测试中,您实例化 ClassAMethodAReturnTrue 而不是 ClassA。同样,您将编写 ClassAMethodAReturnFalse。

于 2008-11-19T10:52:58.847 回答
1

您可能必须从类中提取接口或使其抽象,我有理由确信 Rhino.Mocks 可以模拟类和接口。这意味着您应该能够执行以下操作:

ClassA myClass = MockRepository.PartialMock(typeof(ClassA));

Expect.Call(myClass.MethodA).Return( true );

MockRepository.ReplayAll()
Assert.AreEqual( false, myClass.MethodB() )
MockRepository.VerifyAll()

语法可能有点偏离,但这应该允许 MethodB 独立于 MethodA 进行测试

于 2008-11-19T11:00:56.133 回答