2

内部クラスを使用してテストメソッドを編成するテストクラスを作成しようとしています。このクラスを抽象化し、静的プロパティを設定して、このプロパティを挿入できるようにしたいと思います。これが私が話していることの例です:

[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のテストビューに表示されるためです。

再度、感謝します。

4

4 に答える 4

3

C#言語では、ネストされたクラスは、ネストされているクラスと特別な関係はありません。全く違うタイプです。これを行う正当な理由は1つだけです。それは、クラスをプライベートとして宣言できることです。これは、外部から完全に見えないクラスである外部クラスに代わって仕事を行うための小さなワーカークラスを作成するのに役立ちます。非常に便利です。それ以外の場合は、外部クラススコープでプライベートクラスを宣言することはできません。実行できる最善の方法は内部クラスです。

以下は、それが外部クラスの継承において決して役割を果たさないということです。外部から派生したクラスは、基本クラス内のネストされたクラスをまったく認識できません。それが意図であり、それをプライベートと宣言することが、そもそもそれをネストする理由でした。

パント:派生クラスでそのクラスが必要な場合は、内部またはパブリックとして宣言するだけです。

于 2010-07-01T21:42:42.860 に答える
2

ネストされたタイプはそのようには機能しません。タイプを「オーバーライド」することはできません。

ここで何を達成しようとしているのかは明確ではありませんが、うまくいくとは思いません。

于 2010-07-01T21:00:08.050 に答える
1

xUnit.NETとSubSpecを使用して、リッチで冗長なBDDスタイルのテストを実行できます。SubSpecは、最近ダウンロードされたxUnit.NETエクストラに含まれています。SubSpecおよびBDDテストの詳細については、次の記事を参照してください。

http://haacked.com/archive/2008/08/24/introducing-subspec.aspx

于 2010-07-04T01:53:32.583 に答える
0

設定ファイルを使用するのはどうですか?例えば

   [TestClass]
   public class WhenFoo
   {
      [TestMethod]
      public void TestFoo()
      {
         string str = ConfigurationManager.AppSettings["WhenFooTestFooString"];
      }
   }
于 2010-07-01T21:41:44.597 に答える