我正在尝试创建一个使用内部类组织其测试方法的测试类。我希望这个类是抽象的,能够设置一个静态属性,以便可以注入这个属性。这是我正在谈论的一个例子:
[TestClass]
public abstract class BaseUnitTest
{
public static string InjectedProperty;
public static string GetInjectedString()
{
return InjectedProperty;
}
[TestClass]
public class WhenFoo
{
[TestMethod]
public void TestFoo()
{
string str = GetInjectedString();
}
}
}
[TestClass]
public class DeriverdUnitTest : BaseUnitTest
{
[ClassInitialize]
public void SetUp()
{
InjectedProperty = "Injected Property";
}
}
但是,我没有在我的单元测试视图中看到 DerivedUnitTest+WhenFoo+TestFoo() 类。我正在使用 Visual Studio 2010。我猜当我覆盖 BaseUnitTest 时,我也不会覆盖它的内部类。我想我可以将其内部类抽象化并稍后覆盖它们,但是随着我的测试类的复杂性增加,这将变得非常烦人。有人可以解释为什么会发生这种情况以及我该如何解决?
谢谢。
编辑:
我觉得我需要更好地解释我想要这样做的原因。我们想实现一个命名非常冗长的测试标准。因此,测试类看起来像这样:
[TestClass]
public abstract class BaseUnitTest
{
public static string InjectedProperty;
public static string GetInjectedString()
{
return InjectedProperty;
}
[TestClass]
public class WhenFooIsCalled
{
[TestClass]
public class AndTheArgumentIsNull
{
[TestMethod]
public void AnArgumentNullExceptionShouldBeThrown()
{
string str = GetInjectedString();
}
}
}
}
这样做的好处是,当您在 Visual Studio 中打开测试视图并显示方法名称和类名称列时,您会得到如下所示的内容:
BaseUnitTest+WhenFooIsCalled+AndTheArgumentIsNull AnArgumentNullExceptionShouldBeThrown()
这使得在几百个通过测试中判断失败的测试应该做什么变得容易得多。
我希望能够覆盖抽象 BaseUnitTest 的主要原因是因为当我执行 BaseUnitTest 中包含的所有测试时,都将添加到 DerivedUnitTest 并显示在 Visual Studio 的测试视图中。
再次感谢。