C# 单元测试 - 您是否应该对基类中处理的派生类中的某些内容进行单元测试?

mic*_*ael 5 c# unit-testing

public class Foo<T>
{
    public Foo(Bar bar)
    {
        if (bar == null) throw new ArgumentNullException("bar");
    }
}

public class Foo : Foo<Object>
{
    public Foo(Bar bar) : base(bar) { }
}
Run Code Online (Sandbox Code Playgroud)

基本上,我明白我应该对通用 Foo 的构造函数进行单元测试。我还应该对非通用版本的构造函数进行单元测试吗?我问的原因是因为异常是在通用构造函数级别抛出的......

[TestMethod]
[ExpectedExeption(typeof(ArgumentNullException))]
public void GenericFooNullArgumentInConstructor()
{
    var foo = new Foo<int>(null);
}

//Is this test necessary?
[TestMethod]
[ExpectedExeption(typeof(ArgumentNullException))]
public void NonGenericFooNullArgumentInConstructor()
{
    var foo = new Foo(null);
}
Run Code Online (Sandbox Code Playgroud)

Ami*_*ira 3

一言以蔽之:是的。
这里的关键是回归- 您将编写单元测试来验证当前的实现(或者甚至在实现之前,如果您是 TDD),而且您编写单元测试也是为了保护自己免受将来代码的破坏性更改。
由于基类和子类将来都可能发生更改 - 都应该进行测试。