すべてのテストが実行される前にコードを1回実行することは可能ですか?


112

基本的に、一連のテスト実行を開始する前にMSTestに少しのコードを実行するように指示します。基本的に、私がやりたいことは、いくつかのコードをに貼り付けることと同じですMain()

これを実行したいのは、統合テストの実行中にlog4netを使用してロギングを実行したいためです。log4net.Config.XmlConfiguratorアセンブリ属性を使用することはできませんLoggerManager。テストアセンブリで読み取った時点で、すでに呼び出されているからです。ドキュメントでは、コードエントリポイントでlog4netを明示的に構成することを推奨していますが、テストのどこにありますか?

TestDriven.NETとMSTestランナーでテストを実行できるようにする必要があります。

回答:


153

FWIW、AssemblyInitialize属性を使用して、アセンブリのすべての単体テストが実行される前にコードを実行できます。

[TestClass]
public class SetupAssemblyInitializer
{
    [AssemblyInitialize]
    public static void AssemblyInit(TestContext context)
    {
        // Initalization code goes here
    }
}

複数の単体テストアセンブリがある場合、私は複数のアセンブリを網羅するものは何も知りません。

私の知る限り、これはMainの同等物に到達できる限り近いです。

ことを注意AssemblyInitialize-decorated方法をしなければならないにもTestClass少なくとも1つので含まれてい-decoratedクラスTestMethod-decorated方法、それ以外の場合はなりません実行します!


1
同様の問題(MSTestのみ)があり、問題なく動作しました。ありがとう:)
オスカーフォーリー

1
MsTestとTestDriven.NETの両方からこれを機能させることに問題がある他の人は、静的フラグを使用してClassInitializeでコードを実行するかどうかを決定できます(これはMsTestでは機能しません)。
Carl

7
注:テストエンジンは、AssemblyInitialize属性でマークされたメソッドを、そのメソッドがTestClass属性でマークされたクラスのメンバーである場合にのみ実行します。
Jowen

5
@Jowen:テストエンジンは、そのメソッドがTestClass属性でマークされたクラスのメンバーである場合にのみ、AssemblyInitialize属性でマークされたメソッドを実行しますand contains methods that are marked with the TestMethod attribute
oɔɯǝɹ

3
AssemblyInitializeでマークされたメソッドは、TestMethod属性でマークされた他のメソッドなしでVisual Studio 2015 Ultimateで実行されます。
Chris

63

完了のために、これらはMSTestの「前にコードを実行」オプションです。

  • [AssemblyInitialize]アセンブリ内のテストを実行する前に、アセンブリごとに1回コードを実行するために使用します。
  • [ClassInitialize]メソッドが定義されているクラスでのテストの前に、クラスごとに1回コードを実行するために使用します。
  • [TestInitialize]メソッドが定義されているクラスのすべてのテストの前にコードを実行するために使用します。

12
これらの属性に対応するクリーンアップは、ティアダウン操作のクリーンアップサフィックス(ClassCleanupなど)です
Yair Nevet

13

これはMS Testヘッダーに表示されます。

// Use ClassInitialize to run code before running the first test in the class
//[ClassInitialize()]
//public static void MyClassInitialize(TestContext testContext) { }

これは、1つのクラスのテストの前に実行されます。

すべてのテストの前に何かを実行したいようです。

テスト実行構成には、セットアップスクリプトオプションもあります。


不足しているものがない限り、セットアップスクリプトはテストAppDomainでコードを実行するのに役立ちません。
George Mauer、2010年

2
それはおそらく私です。「テストAppDomainでコードを実行しています。」と言ったときに、私があなたをフォローしていることはわかりません。私はあなたの質問を、一連のテストの前にコードを実行したいと思っていると読みました。「セットアップスクリプトとクリーンアップスクリプトは、テストの実行に含まれるテストの種類に関係なく、テストの実行の前後に実行されます。」 msdn.microsoft.com/en-us/library/ms182480%28VS.80%29.aspx
Maestro1024
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.