c# – 测试旧版代码时添加虚拟关键字
作者:互联网
我正在为一些粗糙的遗留代码添加测试,以便有足够的信心来认真地重构它.其中一个问题是编写代码的人显然没有尝试使代码可测试(假设他们从未编写过单个单元测试!)
一个常见的问题是,目前没有接口,只有11级深度的继承链.我正在使用Rhino Mocks将被测试的类与其依赖项隔离开来,但是当我模拟一个类而不是一个接口时,如果它具有virtual关键字,我只能存根一个只读属性.
我目前的想法是,我只是将虚拟关键字添加到属性中.没有计划将任何其他对象添加到现有依赖关系链中,并且它将允许编写测试.
是否有任何反对添加虚拟关键字的参数,或者这是否是可接受的折衷方案以便进行测试?
示例代码…
在测试类中:
var someClassStub = MockRepository.GenerateStub<SomeClass>();
someClassStub.Stub(s => s.SomeProperty).Return("Test");
在SomeClass中:
public virtual string SomeProperty {
get {
return someDependency.SomeMethod();
}
}
解决方法:
反对添加虚拟的主要论点是它歪曲了你的意图. virtual关键字向您希望可以覆盖此属性的派生类发出信号.
我不会使用虚拟,但如下所示模拟依赖:
var mockedDependency = MockRepository.GenerateMock<IDependency>();
mockedDependency.Expect(x => x.SomeMethod())
.Returns("whatever your test dictates");
var target = new SomeClass(mockedDependency);
mockedDependency.VerifyAllExpectations();
然后将其注入新创建的重载构造函数,如下所示:
public SomeClass(IDependency dependency) : base()
{
this.someDependency = dependency;
}
标签:c,unit-testing,rhino-mocks 来源: https://codeday.me/bug/20190709/1410445.html