1. ホーム
  2. c#

MsTestのClassInitializeとInheritance

2023-09-17 08:24:58

質問

私は以下のように構成されたテスト用の基本クラスを持っています。

[TestClass]
public abstract class MyBaseTest
{
   protected static string myField = "";

   [ClassInitialize]
   public static void ClassInitialize(TestContext context)
   {
       // static field initialization
       myField = "new value";
   }
}

さて、私は次のような署名で、ベースから継承する新しいテストを作ろうとしています。

[TestClass]
public class MyTest : MyBaseTest
{
   [TestMethod]
   public void BaseMethod_ShouldHave_FieldInitialized()
   {
       Assert.IsTrue(myField == "new value");
   }
}

ClassInitialize は子テストからは決して呼び出されません.は何ですか? は何ですか? を使用する方法は何ですか?

どのように解決するのですか?

残念ながら、この方法では実現できません。 ClassInitializeAttributeクラスです。 は継承できないからです。

継承された属性は、それを使用するクラスのサブクラスで使用することができます。そのため ClassInitializeAttribute は継承されないので MyTest クラスが初期化されたときに ClassInitialize メソッドから MyBaseTest クラスのメソッドは呼び出すことができません。

別の方法で解決してみてください。あまり効率的でない方法としては ClassInitialize メソッドを MyTest で、コードを重複させることなく、ベースメソッドを呼び出すだけです。