C에서 테스트 작성#

아래 예제에서는 C# 테스트 태그를 보여 주는 간단한 단일 테스트 클래스가 있는 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# 테스트 태그는 전체 설정 및 클린up 메서드도 지원합니다.

[AssemblyInitialize] 특성 집합이 있는 정적 메서드는 다른 클래스 메서드 이전에 실행되고 어셈블리 수준 초기화(줄 10)를 수행합니다. 따라서 어셈블리 클린up 메서드, 다른 모든 메서드가 완료된 후 실행되는 [AssemblyCleanup] 특성 집합이 있는 정적 메서드(줄 18)가 있습니다.

마찬가지로 클래스 및 테스트 설정 및 클린up 메서드가 있습니다. (줄 24, 32, 38, 44 참조) C++와 달리, 관리 코드의 클래스 설정 및 클린up 메서드는 정적이어야 합니다.

TAEF C# 테스트 태그는 테스트, 클래스 및 모듈 속성을 지원합니다.

모듈 속성을 설정하려면 어셈블리 이니셜라이저에서 특성을 설정합니다(줄 11 및 12 참조). 마찬가지로 클래스 수준 속성을 설정하려면 클래스 이니셜라이저에서 속성을 설정합니다(줄 25 및 26 참조). 테스트 메서드 수준 속성의 경우 특정 테스트 메서드에 속성을 적용하기만 하면됩니다. (줄 52 및 53 참조)

VSTS에서 실행

참고: VSTS 이진 파일에 대한 종속성을 줄이기 위해 현재 클래스 및 어셈블리 설정 메서드는 Object를 첫 번째 매개 변수로 사용합니다.

VSTS에서 테스트를 실행하려면 해당 개체 유형을 TestContext 형식으로 변경하세요. 이렇게 하면 microsoft.visualstudio.qualitytools.unittestframework.dll 및 microsoft.visualstudio.qualitytools.resource.dll 대한 종속성이 추가됩니다.

VSTS에서 실행할 때는 단계가 약간 다릅니다. 관리되지 않는 종속성을 복사하려면 로컬 테스트 실행 설정을 설정해야 합니다. 이렇게 하려면 다음으로 이동합니다.

  • 테스트 편집> 테스트 실행 구성->로컬 테스트 실행
  • Deployment를 클릭합니다. 각 테스트에 대해 복사해야 하는 dll을 입력합니다.
    • Wex.Logger.dll
    • Wex.Common.dll
    • Wex.Common.Managed.dll
    • Wex.Communication.dll
    • Wex.Logger.Interop.dll

이는 VSTS가 새 디렉터리를 만들고 테스트 사례를 실행할 때마다 파일을 복사하기 때문에 필요합니다. 컴퓨터에서 이러한 디렉터리를 프로젝트 폴더의 형제 폴더로 볼 수 있습니다.

기본 애플리케이션에서 관리되는 테스트를 실행하면 됩니다기본

기본적으로 테스트 코드 격리를 위해 TAEF는 특수 테스트 애플리케이션에서 관리되는 테스트를 실행합니다기본. 그러나 기본이 아닌 애플리케이션을 사용할 때기본는 네이티브 코드가 관리 코드(예: 관리 코드에서 사용하는 네이티브 콜백 함수)를 호출하는 시나리오에서 "AppDo에 GCHandle을 전달할 수 없습니다기본s"라는 메시지와 함께 오류가 발생할 수 있습니다. 이러한 시나리오의 경우 /defaultAppDo기본 스위치를 사용하여 관리되는 테스트를 기본 애플리케이션에서 강제로 실행합니다기본.

기본 애플리케이션에서 관리되는 테스트를 실행하면 기본 어셈블리 구성 파일호환되지 않습니다.

비동기 테스트 메서드 지원

TAEF의 NetFX 4.5 이진 파일은 비동기 TAEF 테스트 메서드의 실행을 지원합니다. 즉, 비동기 키워드(keyword) 표시된 TAEF 테스트는 비동기 작업을 대기수 있습니다.

참고 TAEF의 NetFX 2.0/3.5 이진 파일에서 이 기능을 활용하지 마세요. NetFX 4.5 이진 파일만 이 기능을 지원합니다.

TAEF는 비동기 void 및 비동기 작업 테스트 메서드를 모두 지원합니다(둘 다 동일한 기능을 생성).

[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);
}