我正在向一些粗糙的遗留代码添加测试,以便有足够的信心认真重构它。问题之一是编写代码的人显然没有尝试使代码可测试(假设他们从未编写过单个单元测试!)
一个常见的问题是目前没有接口,只有 11 级深度的继承链。我正在使用 Rhino Mocks 将被测类与其依赖项隔离开来,但由于我正在模拟一个类,而不是一个接口,所以如果它具有virtual
关键字,我只能存根只读属性。
我目前的想法是我只需将virtual
关键字添加到属性中。没有计划将任何进一步的对象添加到现有的依赖链中,它将允许编写测试。
是否有反对添加virtual
关键字的任何论据,或者这是一个可以接受的妥协以便进行测试?
示例代码...
在测试类中:
var someClassStub = MockRepository.GenerateStub<SomeClass>();
someClassStub.Stub(s => s.SomeProperty).Return("Test");
在某些类中:
public virtual string SomeProperty {
get {
return someDependency.SomeMethod();
}
}