我正在为一个具有依赖关系的服务方法进行单元测试。简化为:
public class ConditionChecker
{
private SqlConnection _connection;
public bool CanDoSomething()
{
return _connection.State == ConnectionState.Open;
}
}
public class A
{
public ConditionChecker Checker { get; set; }
public bool CanInvokeA()
{
return Checker.CanDoSomething();
}
}
[TestClass]
public class ATests
{
[TestMethod]
public void TestCanInvokeA()
{
// arrange
A a = new A();
ConditionChecker checker = MockRepository.GenerateStub<ConditionChecker>();
checker.Stub(x => x.CanDoSomething()).Return(true);
a.Checker = checker;
// act
bool actual = a.CanInvokeA();
// assert
Assert.AreEqual(true, actual);
}
}
我想要的是完全绕过ConditionChecker.CanDoSomething
的实现,这就是为什么我存根调用,仍然在测试期间遇到空引用异常,因为_connection
成员未设置。我在这里做错了什么?
答案 0 :(得分:1)
您只需将方法标记为virtual
,它就会起作用:
public virtual bool CanDoSomething()
{
}
由于场景背后的Rhino Mock将为ConditionChecker
创建动态代理,因此您需要标记virtual
以允许Rhino Mock覆盖它。