본 글에서는 Windows 8 개발을 위한 테스트 코드 활용 방법을 소개합니다. 도움이 필요한 친구는
1. 솔루션 만들기 및 단위 테스트프로젝트
1)를 참조하세요. 그런 다음 "새 프로젝트"를 선택하십시오.
2) "새 프로젝트" 대화 상자에서 "설치됨", "Visual C#"을 확장하고 "Windows Store"를 선택합니다. 그런 다음 프로젝트 템플릿 목록에서 "빈 응용 프로그램"을 선택합니다.
3) 프로젝트 이름을 MyTestProject로 지정하고 "솔루션 디렉터리 만들기"가 선택되어 있는지 확인하세요.
4) 솔루션 탐색기에서 솔루션 이름을 선택하고 바로가기 메뉴에서 추가를 선택한 후 새 프로젝트를 선택합니다.
5) "새 프로젝트" 대화 상자에서 "설치됨", "Visual C#"을 확장한 다음 "Windows Store"를 선택합니다. 그런 다음 프로젝트 템플릿 목록에서 단위 테스트 라이브러리(Windows Store 앱)를 선택합니다.
참고: 먼저 프로젝트를 생성한 다음 이 프로젝트에 테스트 프로젝트를 추가하면 개발 중에 프로젝트를 테스트해야 하는 필요성이 충족됩니다.
6) Visual Studio 편집기에서 UnitTest1.cs를 엽니다.
코드는 다음과 같습니다.
namespace UnitTestLibraryTest{ [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() {</p> <p> } }}
다음 사항에 유의하세요.
a. 각 테스트는 [TestMethod]를 사용하여 정의됩니다. 테스트 메서드는 void를 반환해야 하며 매개변수를 가질 수 없습니다. 클래스 이름 앞 줄에 [TestClass] 선언을 추가합니다.
b. 테스트 메서드는 [TestMethod] 특성으로 데코레이팅된 클래스에 있어야 합니다. 테스트를 실행할 때 각 테스트 클래스의 인스턴스가 생성됩니다. 테스트 메서드는 지정되지 않은 순서로 호출됩니다.
c. 각 모듈, 각 클래스 또는 각 메서드 전후에 호출할 특정 메서드를 정의할 수 있습니다.
d. 파일 헤드에 Microsoft.VisualStudio.TestPlatform.UnitTestFramework 사용에 대한 참조를 추가합니다.
7) 테스트 전 초기화 및 테스트 후 정리. 사용법과 코드는 다음과 같습니다.
코드는 다음과 같습니다.
namespace UnitTestLibraryTest { [TestClass] public class UnitTest1 { private int a; private int b;</p> <p> // 当前测试类运行第一个测试方法之前执行,类似于 构造函数 [ClassInitialize] public static void MyClassInit(TestContext context) { } // 所有测试方法运行完毕后执行,类似于 析构函数 [ClassCleanup] public static void MyClass End () { }</p> <p> //每个测试方法运行之前执行 [TestInitialize] public void Init() { a = 1; b = 1; } //每个测试方法运行之后执行 [TestCleanup] public void End() { a = 0; b = 0; }</p> <p> } }
참고: 위 메소드의 경우 메소드 이름을 사용자 정의할 수 있으며, [ClassInitialize] 함수를 제외하고는 TestContext의 매개변수 외에는 반환값이 없습니다.
2. 테스트 관리 리소스에서 테스트가 실행 중인지 확인합니다
1). UnitTest1.cs 파일의 TestMethod1에 일부 테스트 코드를 삽입합니다.
code 다음과 같습니다:
[TestMethod] public void AddTestMethod() { int a = 1; int b = 2; int sum = a+b; Assert.AreEqual(3,sum); }
Assert 클래스에서 제공하는 여러 static 메서드를 사용하여 테스트 메서드의 결과를 확인할 수 있습니다.
2) "테스트" 메뉴에서 "실행"을 선택한 후 "모두 실행"을 선택합니다.
테스트 프로젝트가 생성되어 실행됩니다. 테스트 탐색기 창이 나타나고 테스트는 통과한 테스트 아래에 나열됩니다. 창 하단의 "요약" 창에서는 선택한 테스트에 대한 추가 세부정보를 제공합니다.
3. MyTestProject 프로젝트에 Rooter 클래스를 추가합니다
1) "Solution Explorer"에서 "MyTestProject" 프로젝트를 선택합니다. 이름. 바로 가기 메뉴에서 추가를 선택한 다음 클래스를 선택합니다.
2) 클래스 파일 이름을 Rooter.cs로 지정합니다.
3) Rooter 클래스 Rooter.cs 파일에 다음 코드를 추가합니다.
코드는 다음과 같습니다.
public class Rooter { public Rooter() { } public double SquareRoot(double x) { return 0.0; } }
Rooter 클래스는 생성자와 SqareRoot 추정기를 선언합니다. 방법.
4).SqareRoot 메소드는 테스트를 위한 기본 테스트 구조를 설정하기에 충분한 최소한의 구현일 뿐입니다.
4. 테스트 프로젝트를 애플리케이션 프로젝트에 병합합니다
1). UnitTestLibraryTest 프로젝트에 "MyTestProject" 애플리케이션에 대한 참조를 추가합니다.
2) UnitTest1.cs 파일에 using 문을 추가합니다.
a.
b. Microsoft.VisualStudio.TestPlatform.UnitTestFramework;를 사용하여 줄 아래에 코드를 추가합니다.: using MyTestProject;
3) Rooter 기능을 사용하여 테스트를 추가합니다. UnitTest1.cs에 다음 코드를 추가합니다.
코드는 다음과 같습니다.
[TestMethod] public void BasicTest() { Rooter rooter = new Rooter(); double expected = 0.0; double actual = rooter.SquareRoot(expected * expected); double tolerance = .001; Assert.AreEqual(expected, actual, tolerance); }
4).
테스트 탐색기의 "테스트 실행 취소" 노드에 새 테스트가 나타납니다.
5) 테스트 탐색기에서 "모두 실행"을 선택합니다. 기본 테스트 통과
테스트 및 코드 프로젝트를 설정했으며 코드 프로젝트에서 기능을 실행하는 테스트를 실행할 수 있음을 확인했습니다. 이제 실제 테스트와 코드 작성을 시작할 수 있습니다.
5. 반복적으로 테스트를 추가하고 해당 테스트를 통과시킵니다.
1) 새 테스트 추가:
코드는 다음과 같습니다.
[TestMethod] public void Range Test() { Rooter rooter = new Rooter(); for (double v = 1e-6; v < 1e6; v = v * 3.2) { double expected = v; double actual = rooter.SquareRoot(v * v); double tolerance = ToleranceHelper(v); Assert.AreEqual(expected, actual, tolerance); } }</p> <p> private double ToleranceHelper(double expected) { return expected / 3.2; }
提示:建议您不要更改已通过的测试。而是添加新测试,更新代码以便测试通过,然后添加其他测试等。 当您的用户更改其要求时,请禁用不再正确的测试。编写新测试并使它们以相同的增量方式一次运行一个。
2).在测试资源管理器中,选择“全部运行”。
3).测试将不会通过。 RangeTest 未通过
提示:编写测试后,立即验证每个测试是否都将失败。这帮助您避免易犯的错误,不会编写从不失败的测试。
4).增强受测代码,以便新测试通过。将 Rooter.cs 中的 SqareRoot 函数更改为:
代码如下:
public double SquareRoot(double x) { double estimate = x; double d if f = x; while (diff > estimate / 1000) { double prev iousEstimate = estimate; estimate = estimate - (estimate * estimate - x) / (2 * estimate); diff = Math.Abs(previousEstimate - estimate); } return estimate; }
5).生成解决方案,然后在测试资源管理器中,选择“全部运行”。
现在所有三个测试都将通过。
提示:通过添加测试的方式一次性开发代码。确保所有测试在每次迭代后都通过。
6.调用未通过的测试
1).向 UnitTest1.cs 添加另一个测试:
代码如下:
[TestMethod] public void NegativeRangeTest() { string message; Rooter rooter = new Rooter(); for (double v = -0.1; v > -3.0; v = v - 0.5) { try { // Should raise an exception: double actual = rooter.SquareRoot(v);</p> <p> message = String.Format("No exception for input {0}", v); Assert.Fail(message); } catch (ArgumentOutOfRangeException ex) { continue; // Correct exception. } catch (Exception e) { message = String.Format("Incorrect exception for {0}", v); Assert.Fail(message); } } }
2).在测试资源管理器中,选择“全部运行”。
测试将不会通过。在测试资源管理器中选择测试名称。将突出显示失败的断言。失败消息将在测试资源管理器的细节窗格中可见。NegativeRangeTests 未通过。
3).若要查看测试未通过的原因,请单步执行以下函数:
a.在 SquareRoot 函数的开头设置断点。
b.在未通过测试的快捷菜单上,选择“调试选定的测试”。 当运行在断点处停止时,请单步执行以下代码。
c.向 Rooter 方法添加代码以捕获异常,将SquareRoot方法修改如下(对x进行判断捕获异常):
代码如下:
public double SquareRoot(double x) { if (x < 0.0) { throw new ArgumentOutOfRangeException(); } double estimate = x; double diff = x; while (diff > estimate / 1000) { double previousEstimate = estimate; estimate = estimate - (estimate * estimate - x) / (2 * estimate); diff = Math.Abs(previousEstimate - estimate); } return estimate; }
在测试资源管理器中,选择“全部运行”以测试已纠正的方法,并确保您未引入回归测试。所有测试都将通过。
【相关推荐】
4. 教你如何在Windows环境下安装python2和python3两个版本
위 내용은 Windows 8 개발을 위해 테스트 코드를 사용하는 방법에 대한 자세한 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!