11

ゴール:

TestContext.TestName プロパティを使用して、実行中のテストの名前を抽出し、[TestCleanup] 関数が結果を特注の結果リポジトリに記録できるようにします。これは、すべてのテストが完了するたびに自動的に行われます。

問題:

以下の構造に似た5つのテストを含む私の基本的な「サニティチェック」テストプロジェクトでも:

[TestMethod]
public void TestMethodX()
{
    Console.WriteLine(String.Format("In Test '{0}'",_ctx.TestName));
    Assert.IsTrue(true);
}

以下のようなクラス「初期化子」を使用して、_ctx を設定します。

[ClassInitialize]
public static void ClassInit(TestContext Context)
{
    _ctx = Context;
    Console.WriteLine("In ClassInit()");
}

[[注: Console.WriteLines は、マウスをホバーして値/プロパティなどを検査するためだけに存在します]]

NEVERは_ctx.TestName、テストの実行における最初のテストの名前から変更されません。つまり、5 つのテスト ('TestMethod1'、'TestMethod2'、'TestMethod3' など) をすべて実行すると、すべてのテスト名として 'TestMethod1' がログに記録されます。私の結果リポジトリに。テストを個別に実行すると問題なく動作しますが、アプリケーションに対して 10/100/1000 のテストを実行し、testContext にテスト名または私を処理させる必要があるため、これは役に立ちません。

私はこれを数回試しましたが、インターネットの負荷を検索しましたが、この問題を抱えている人は誰もいませんでした. うまくいけば、これは理にかなっていて、誰かが答えを持っています.

前もって感謝します、

アンディ

4

2 に答える 2

15

これは[ClassInitialize]、テスト実行全体で が 1 回だけ実行され_ctx、そこで を初期化したために発生しています。[TestInitialize]代わりに、各テスト メソッドの前に実行される を使用し、 TestContext Class をオーバーライドします

[TestClass]
public class TestClass
{
    public TestContext TestContext { get; set; }

    [TestInitialize]
    public void Initialize()
    {
        // Runs once before each test method and logs the method's name
        Console.WriteLine(TestContext.TestName);
    }

    [TestMethod]
    public void TestMethod1()
    {
        // Logs the method name inside the method
        Console.WriteLine(String.Format("In Test '{0}'", TestContext.TestName));
    }

    // ... Your rest test methods here
}
于 2012-11-21T14:42:28.177 に答える
-1

MSTest.exe の出力は、テストの完全な結果、名前、合格または失敗、およびこれらのテストのいずれかからの出力を含む .trx (xml) ファイルを出力するように構成できます。また、TRX ファイルを HTML httpに変換するツールもあります。 ://trxtohtml.codeplex.com/

お役に立てれば

于 2012-11-21T13:28:46.290 に答える