使用Rhino存根限制UnitTest的范围
本文关键字:UnitTest 范围 Rhino 存根 使用 | 更新日期: 2023-09-27 18:10:14
我正在做一个服务方法的单元测试,它有依赖关系。简化:
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
成员没有设置。我哪里做错了?
您只需将您的方法标记为virtual
,它将工作:
public virtual bool CanDoSomething()
{
}
由于Rhino Mock将在后台为ConditionChecker
创建一个动态代理,因此您需要标记virtual
以允许Rhino Mock覆盖它。