内部クラスを使用してテストメソッドを編成するテストクラスを作成しようとしています。このクラスを抽象化し、静的プロパティを設定して、このプロパティを挿入できるようにしたいと思います。これが私が話していることの例です:
[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に追加され、VisualStudioのテストビューに表示されるためです。
再度、感謝します。