我是RhinoMocks的新手,我正在尝试编写如图所示的测试 我有类似这样的课程
public class A
{
public void methodA(){}
}
public class B
{
public void methodB(A a)
{
a.methodA();
}
}
我正试图像这样测试它
A a = MockRepository.GenerateMock<A>();
public void ShouldTest()
{
B b = new B();
b.methodB(a);
a.AssertWasCalled(x=>x.methodA());
a.VerifyAllExpectations();
}
但是它显示的错误如下所示: System.InvalidOperationException:没有设置要求验证的期望,确保操作中的方法调用是虚拟(C#)/可覆盖(VB.Net)方法调用。
我如何测试methodB呢?有人可以帮忙??
答案 0 :(得分:4)
当您调用MockRepository.Generate ***
方法时,Rhino mock会创建代理类。这意味着扩展您的类型。如果您没有声明任何抽象,则无法进行任何在任何模拟框架中必不可少的派生。
你可以做两件事
示例代码
public interface IA { void methodA();}
public class A:IA{public void methodA() { }}
public class B
{
public void methodB(IA a)
{
a.methodA();
}
}
[TestFixture]
public class Bar
{
[Test]
public void BarTest()
{
//Arrange
var repo = MockRepository.GenerateMock<IA>();
//Act
B b = new B();
b.methodB(repo);
//Assert
repo.AssertWasCalled(a => a.methodA());
repo.VerifyAllExpectations();
}
}
答案 1 :(得分:1)
您拥有没有虚拟方法且没有接口的具体类。你不能嘲笑任何东西。
<强>更新强>
这是一种方法:
public interface IA
{
void methodA();
}
public class A : IA
{
public void methodA(){}
}
public class B
{
public void methodB(IA a)
{
a.methodA();
}
}
然后使用
IA a = MockRepository.GenerateMock<IA>();