使用Rhino存根限制UnitTest的范围

时间:2013-04-22 09:26:13

标签: c# rhino-mocks

我正在为一个具有依赖关系的服务方法进行单元测试。简化为:

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成员未设置。我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您只需将方法标记为virtual,它就会起作用:

public virtual bool CanDoSomething()
{
}

由于场景背后的Rhino Mock将为ConditionChecker创建动态代理,因此您需要标记virtual以允许Rhino Mock覆盖它。