次の方法で共有


TestContext クラス

TestContext クラスは、テストの実行を管理するのに役立つ情報とツールを提供します。 これにより、テストの実行に関する詳細にアクセスし、テスト環境を調整できます。 このクラスは、 Microsoft.VisualStudio.TestTools.UnitTesting 名前空間の一部です。

TestContext オブジェクトへのアクセス

TestContext オブジェクトは、次のコンテキストで使用できます。

  • AssemblyInitialize のパラメーターとして、ClassInitialize メソッド。 このコンテキストでは、テストの実行に関連するプロパティは使用できません。
  • 3.6 以降では、必要に応じて AssemblyCleanup のパラメーターとして ClassCleanup メソッドが使用されます。 このコンテキストでは、テストの実行に関連するプロパティは使用できません。
  • テスト クラスのプロパティとして。 このコンテキストでは、テストの実行に関連するプロパティを使用できます。
  • テスト クラスのコンストラクター パラメーター (v3.6 以降)。 この方法は、コンストラクター内のオブジェクトへのアクセスを提供するため、プロパティの使用よりも推奨されます。 プロパティはコンストラクターの実行後にのみ使用できます。 この方法は、オブジェクトの不変性を確保し、コンパイラがオブジェクトが null ではないことを強制するのにも役立ちます。
using Microsoft.VisualStudio.TestTools.UnitTesting;

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

    [AssemblyInitialize]
    public static void AssemblyInitialize(TestContext context)
    {
        // Access TestContext properties and methods here. The properties related to the test run are not available.
    }

    [ClassInitialize]
    public static void ClassInitialize(TestContext context)
    {
        // Access TestContext properties and methods here. The properties related to the test run are not available.
    }

    [TestMethod]
    public void MyTestMethod()
    {
        // Access TestContext properties and methods here
    }
}

または、MSTest 3.6 以降の場合:

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class MyTestClassTestContextThroughCtor
{
    private readonly TestContext _testContext;

    public MyTestClassTestContextThroughCtor(TestContext testContext)
    {
        _testContext = testContext;
    }

    [AssemblyInitialize]
    public static void AssemblyInitialize(TestContext context)
    {
        // Access TestContext properties and methods here. The properties related to the test run are not available.
    }

    [ClassInitialize]
    public static void ClassInitialize(TestContext context)
    {
        // Access TestContext properties and methods here. The properties related to the test run are not available.
    }

    [TestMethod]
    public void MyTestMethod()
    {
        // Access TestContext properties and methods here
    }
}

TestContext メンバー

TestContext クラスは、テスト環境を操作するメソッドと共に、テストの実行に関するプロパティを提供します。 このセクションでは、最もよく使用されるプロパティとメソッドについて説明します。

テスト実行情報

TestContextは、次のようなテストの実行に関する情報を提供します。

MSTest 3.7 以降では、 TestContext クラスには、 TestInitialize メソッドと TestCleanup メソッドに役立つ新しいプロパティも用意されています。

  • TestContext.TestData - パラメーター化されたテスト メソッドに提供されるデータ。テストがパラメーター化されていない場合は null
  • TestContext.TestDisplayName - テスト メソッドの表示名。
  • TestContext.TestException - テストメソッドまたはテストの初期化でスローされた例外、もしくはテストメソッドが例外をスローしなかった場合のnull

データ ドリブン テスト

MSTest 3.7 以降では、プロパティ TestContext.TestData を使用して、 TestInitialize メソッドと TestCleanup メソッドの間に現在のテストのデータにアクセスできます。

.NET Framework を対象とする場合、 TestContext を使用すると、 DataRowDataConnection ( DataSource ベースのテストの場合) などのプロパティを使用して、データ ドリブン テストの各イテレーションのデータを取得および設定できます。

次の CSV ファイルの TestData.csvについて考えてみましょう。

Number,Name
1,TestValue1
2,TestValue2
3,TestValue3

DataSource属性を使用して、CSV ファイルからデータを読み取ることができます。

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;

namespace YourNamespace
{
    [TestClass]
    public class CsvDataDrivenTest
    {
        public TestContext TestContext { get; set; }

        [TestMethod]
        [DataSource(
            "Microsoft.VisualStudio.TestTools.DataSource.CSV",
            "|DataDirectory|\\TestData.csv",
            "TestData#csv",
            DataAccessMethod.Sequential)]
        public void TestWithCsvDataSource()
        {
            // Access data from the current row
            int number = Convert.ToInt32(TestContext.DataRow["Number"]);
            string name = TestContext.DataRow["Name"].ToString();

            Console.WriteLine($"Number: {number}, Name: {name}");

            // Example assertions or logic
            Assert.IsTrue(number > 0);
            Assert.IsFalse(string.IsNullOrEmpty(name));
        }
    }
}

ランタイム データの格納と取得

TestContext.Propertiesを使用すると、同じテスト セッション内のさまざまなメソッド間でアクセスできるカスタム キーと値のペアを格納できます。

TestContext.Properties["MyKey"] = "MyValue";
string value = TestContext.Properties["MyKey"]?.ToString();

データをテストに関連付ける

TestContext.AddResultFile(String)メソッドを使用すると、テスト結果にファイルを追加して、テスト出力で確認できるようにします。 これは、テスト結果に添付するファイル (ログ ファイル、スクリーンショット、データ ファイルなど) をテスト中に生成する場合に便利です。

using Microsoft.VisualStudio.TestTools.UnitTesting;

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

    [TestMethod]
    public void TestMethodWithResultFile()
    {
        // Simulate creating a log file for this test
        string logFilePath = Path.Combine(TestContext.TestRunDirectory, "TestLog.txt");
        File.WriteAllText(logFilePath, "This is a sample log entry for the test.");

        // Add the log file to the test result
        TestContext.AddResultFile(logFilePath);

        // Perform some assertions (example only)
        Assert.IsTrue(File.Exists(logFilePath), "The log file was not created.");
        Assert.IsTrue(new FileInfo(logFilePath).Length > 0, "The log file is empty.");
    }
}

TestContext.WriteまたはTestContext.WriteLineメソッドを使用して、カスタム メッセージをテスト出力に直接書き込むこともできます。 これは、テスト実行コンテキスト内でリアルタイムのログ情報を提供するため、デバッグ目的で特に便利です。