2

我开始按照 Phil Haack 建议的方式组织单元测试。我的测试类每个被测公共方法都有一个嵌套类。嵌套类是从外部类派生的,以便继承其设置代码。

我现在有一个案例,我想测试一个抽象基类和两个派生类的简单层次结构。我想明确地测试每个派生类与基类的交互,而不是使用某种模拟派生类测试基类。

我过去使用一个基本测试夹具和每个派生类一个派生夹具来完成此操作,其中派生夹具必须为基本夹具中的测试实现一些模板方法:

[TestFixture]
public abstract class BaseFixture
{
    protected abstract MyBaseClassUnderTest GetTestInstance();

    [Test]
    public void SomeMethod_SomeCondition_SomeOutcome()
    {
        var sut = GetTestInstance();

        //test base class behavior here
    }

    //More base class tests here
}

public class DerivedFixture : BaseFixture
{
    protected override MyBaseClassUnderTest GetTestInstance()
    { 
        return new DerivedInstance(); 
    }

    //Tests for derived class go here
}

有谁知道,我该如何解决这个问题?现在我看不到如何结合这两种方法,因为不同的继承策略(从外部类继承设置代码与从基类夹具继承基类测试)。

4

1 回答 1

2

这是一个非常有趣的问题,当然多重继承是不可能的,因此我想您需要找到您正在使用的两种继承策略之一的替代方案。

个人意见是,您应该保留Haack组织测试的方法以确保整个测试套件的一致性,并寻找一种替代方法来通过类层次结构共享测试。我所知道的与多重继承最接近的概念是 of Mixins,如果您查看Is it possible to Implement Mixins in C#的答案,似乎可以使用扩展方法模拟 mixins。我会走这条路——这篇博文讨论了创建 mixin 的可能策略,这些 mixin 可以访问使用它们的类中保存的数据,我相信你需要这些策略才能将派生类实例提供给你的基类级别测试(即替换GetTestInstance)。

于 2013-07-19T13:58:39.217 回答