编程语言
首页 > 编程语言> > c# – 测试旧版代码时添加虚拟关键字

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