C# でテストを作成する
次の例は、C# テスト マークアップを示す単純な 1 つのテスト クラスを含む C# .cs ファイルを表しています。 (この例はデモンストレーションのみを目的としているため、コンパイルや実行は行われません。)
1 using Microsoft.VisualStudio.TestTools.UnitTesting;
2 using System;
3 using System.Collections;
4 using WEX.Logging.Interop;
5 using WEX.TestExecution;
6
7 [TestClass]
8 public class ManagedStartMenuTests
9 {
10 [AssemblyInitialize]
11 [TestProperty("Component", "Navigation")]
12 [TestProperty("SubComponent", "StartMenu")]
13 public static void RunModuleSetup(Object context)
14 {
15 defaultPolicy = SetObjectFactoryPolicy(PolicyClassic);
16 }
17
18 [AssemblyCleanup]
19 public static void RunModuleCleanup()
20 {
21 SetObjectFactoryPolicy(defaultPolicy);
22 }
23
24 [ClassInitialize]
25 [TestProperty("TeamOwner", "WEX")]
26 [TestProperty("GroupOwner", "MediaPlayerTest")]
27 public static void TestClassSetup(Object testContext)
28 {
29 objectFactory = new ObjectFactory();
30 }
31
32 [ClassCleanup]
33 public static void TestClassCleanup()
34 {
35 objectFactory.Dispose();
36 }
37
38 [TestInitialize]
39 public void TestMethodSetup()
40 {
41 startMenuObject = objectFactory.CreateObject();
42 }
43
44 [TestCleanup]
45 public void TestMethodCleanup()
46 {
47 startMenuObject.Dispose();
48 }
49
50
51 [TestMethod]
52 [Owner("Someone")]
53 [Priority(0)]
54 public void TestMethod1()
55 {
56 Verify.AreEqual(startMenuObject.size, expectedObjectSize);
57 }
58 }
C# テストを宣言するために、TAEF は VSTS テスト マークアップを使用します。
C# でテスト クラスを宣言するには、通常の C# クラス (7 行目) で [TestClass] 属性を使用し、テスト メソッドの宣言には、通常のクラス メソッド (51 行目) で [TestMethod] 属性を使用します。
C# テスト マークアップでは、さまざまなセットアップ メソッドと クリーンアップ メソッドもサポートされています。
[AssemblyInitialize] 属性セットを持つ静的メソッドは、他のクラス メソッドの前に実行され、アセンブリ レベルの初期化を実行します (10 行目)。 したがって、アセンブリ クリーンアップ メソッドがあります。これは、[AssemblyCleanup] 属性が設定された静的メソッドで、他のすべてのメソッドが完了した後に実行されます (18 行目)。
同様に、クラスとテストのセットアップメソッドとクリーンアップ メソッドも存在します。 (24 行目、32 行目、38 行目、44 行目を参照) C++ とは異なり、マネージド コードのクラスセットアップメソッドとクリーンアップ メソッドは静的である必要があります。
TAEF C# テスト マークアップでは、テスト、クラス、モジュールのプロパティがサポートされています。
モジュールのプロパティを設定するには、アセンブリ初期化子に属性を設定します (11 行目と 12 行目を参照)。 クラス レベルのプロパティを設定するのと同様に、クラス初期化子にプロパティを設定します (25 行目と 26 行目を参照)。 テスト メソッド レベルのプロパティの場合は、特定のテスト メソッドにプロパティを適用するだけです。 (52 行目と 53 行目を参照)
VSTS での実行
注: VSTS バイナリへの依存関係を減らすために、現在のクラスおよびアセンブリのセットアップ メソッドは Object を最初のパラメーターとして受け取ります。
VSTS からテストを実行する場合は、そのオブジェクトの種類を TestContext 型に変更してください。 これにより、microsoft.visualstudio.qualitytools.unittestframework.dllとmicrosoft.visualstudio.qualitytools.resource.dllへの依存関係が追加されることに注意してください。
VSTS で実行する場合、手順は少し異なります。 アンマネージ依存関係をコピーするには、ローカル テスト実行の設定をする必要があります。 これを行うには、次のサイトにアクセスする:
- テスト->テスト実行設定の編集>-ローカルテスト実行
- [配置] をクリックします。各テストにコピーする必要がある dll を入力します:
- Wex.Logger.dll
- Wex.Common.dll
- Wex.Common.Managed.dll
- Wex.Communication.dll
- Wex.Logger.Interop.dll
これは、VSTSがテストケースを実行するたびに新しいディレクトリを作成し、ファイルをコピーするために必要です。 マシン上のこれらのディレクトリは、プロジェクト フォルダーの兄弟フォルダーとして表示できます。
既定のアプリケーションドメインでマネージドテストを実行する
既定では、テスト コードの分離のために、TAEF は特別なテスト アプリケーションドメインでマネージドテストを実行します。 ただし、既定以外のアプリケーション ドメインを使用する場合、ネイティブコードがマネージドコードを呼び出すシナリオ (たとえば、マネージドコードによって消費されるネイティブコールバック関数) では、次のメッセージが表示されるエラーが発生する可能性があります: 「AppDomain 間で GCHandle を渡すことはできません。」 これらのシナリオでは、/defaultAppDomain スイッチを使用して既定のアプリケーションドメインでマネージド テストを強制的に実行します。
既定のアプリケーションドメインでマネージド テストを実行することは、アセンブリ構成ファイルと互換性がないことに注意してください。
非同期テスト メソッドのサポート
TAEF の NetFX 4.5 バイナリでは、非同期 TAEF テスト メソッドの実行がサポートされています。 つまり、非同期キーワードでマークされた TAEF テストは、非同期操作を待機できます。
注: TAEF の NetFX 2.0/3.5 バイナリではこの機能を利用しないでください。この機能をサポートするのは NetFX 4.5 バイナリのみです。
TAEF では、async void と async Task の両方のテスト メソッドがサポートされています (両方とも同じ機能になります)。
[TestMethod]
public async Task MyAsyncTest()
{
await AsyncAPICall1();
var result = await AsyncAPICall2();
Verify.IsTrue(result);
}
あるいは:
[TestMethod]
public async void MyAsyncTest2()
{
await AsyncAPICall1();
var result = await AsyncAPICall2();
Verify.IsTrue(result);
}