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は、次のようなテストの実行に関する情報を提供します。
- TestContext.TestName – 現在実行中のテストの名前。
- TestContext.CurrentTestOutcome - 現在のテストの結果。
- TestContext.FullyQualifiedTestClassName - テスト クラスの完全な名前。
- TestContext.TestRunDirectory - テスト実行が実行されるディレクトリ。
- TestContext.DeploymentDirectory - デプロイ項目が配置されているディレクトリ。
- TestContext.ResultsDirectory - テスト結果が格納されているディレクトリ。 通常は、 TestContext.TestRunDirectoryのサブディレクトリです。
- TestContext.TestRunResultsDirectory - テスト結果が格納されているディレクトリ。 通常は、 TestContext.ResultsDirectoryのサブディレクトリです。
- TestContext.TestResultsDirectory - テスト結果が格納されているディレクトリ。 通常は、 TestContext.ResultsDirectoryのサブディレクトリです。
MSTest 3.7 以降では、 TestContext クラスには、 TestInitialize
メソッドと TestCleanup
メソッドに役立つ新しいプロパティも用意されています。
-
TestContext.TestData - パラメーター化されたテスト メソッドに提供されるデータ。テストがパラメーター化されていない場合は
null
。 - TestContext.TestDisplayName - テスト メソッドの表示名。
-
TestContext.TestException - テストメソッドまたはテストの初期化でスローされた例外、もしくはテストメソッドが例外をスローしなかった場合の
null
。
データ ドリブン テスト
MSTest 3.7 以降では、プロパティ TestContext.TestData を使用して、 TestInitialize
メソッドと TestCleanup
メソッドの間に現在のテストのデータにアクセスできます。
.NET Framework を対象とする場合、 TestContext を使用すると、 DataRow
や DataConnection
( 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メソッドを使用して、カスタム メッセージをテスト出力に直接書き込むこともできます。 これは、テスト実行コンテキスト内でリアルタイムのログ情報を提供するため、デバッグ目的で特に便利です。
.NET