我有一个类似的课程:
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的测试中设置所有相同的模拟?
答案 0 :(得分:1)
如果没有上下文,很难说这是否可行,但是一个解决方案可以将MethodA()提取到它自己的类中,这样你就可以让MethodB()在一个模拟对象上调用MethodA(),它将作为你的单元测试愿望。
另一种可能性是在您的单元测试中继承ClassA,并根据您的单元测试覆盖MethodA()以返回true或false。
//--- pseudo-code
public ClassAMethodAReturnTrue : public ClassA {
public bool MethodA() { return true; }
...
然后在测试中,实例化ClassAMethodAReturnTrue而不是ClassA。你也会写同样的ClassAMethodAReturnFalse。
答案 1 :(得分: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进行测试