关于Windows 8 开发之测试代码的使用方法

1.创建解决方案和单元测试项目
1).“文件”菜单上选择“新建”,然后选择“新建项目”。
2).在“新建项目”对话框中,展开“已安装”、“Visual C#”,选择“Windows Store”。然后从项目模板列表中选择“空白应用程序”。
3).将项目命名为 MyTestProject,并确保选中“创建解决方案的目录”。
4).在解决方案资源管理器中,选择解决方案名称,从快捷菜单中选择“添加”,然后选择“新建项目”。
5).在“新建项目”对话框中,展开“已安装”、“Visual C#”,然后选择“Windows 应用商店”。然后从项目模板列表中选择“单元测试库(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.在文件头部加入using 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 MyClassEnd()
{
}</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 中插入一些测试代码:

复制代码

代码如下:

[TestMethod]
public void AddTestMethod()
{
int a = 1;
int b = 2;
int sum = a+b;
Assert.AreEqual(3,sum);
}

注意,Assert 类提供的若干静态方法可用于验证测试方法的结果。

2).在“测试”菜单上,选择“运行”,然后选择“全部运行”。
将生成并运行测试项目。随即显示“测试资源管理器”窗口,并且测试列出在“已通过的测试”下。窗口底部的“摘要”窗格将提供有关所选测试的其他详细信息。

3.向MyTestProject项目添加Rooter类

1).在“解决方案资源管理器”中,选择“MyTestProject”项目名称。从快捷菜单中选择“添加”,然后选择“类”。
2).将类文件命名为 Rooter.cs。
3).将以下代码添加到 Rooter 类 Rooter.cs 文件中:

复制代码

代码如下:

public class Rooter
{
public Rooter()
{
}
public double SquareRoot(double x)
{
return 0.0;
}
}

Rooter 类声明一个构造函数和 SqareRoot estimator 方法。

4).SqareRoot 方法只是一个最小实现,足以为测试设置测试基本结构。

4.将测试项目合并为应用程序项目

1).将对 "MyTestProject"应用程序的引用添加到 UnitTestLibraryTest项目中。

2).向 UnitTest1.cs 文件添加 using 语句:

a.打开 UnitTest1.cs。

b.在 using 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 RangeTest()
{
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 diff = x;
while (diff > estimate / 1000)
{
double previousEstimate = 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;
}

在测试资源管理器中,选择“全部运行”以测试已纠正的方法,并确保您未引入回归测试。所有测试都将通过。

(0)

相关推荐

  • Windows 8技巧:Windows 8开发知识储备[实用篇]

    在本文中将整理出一些Windows 8开发前需要了解的一些基础知识并且列为相应的几个表格以供大家参考,如有误之处请指正,谢谢。 一、新建常用XAML项目类型模板和各种语言的关系 项目类型名 项目类型作 ...

  • windows 8 开发之开发平台与开发框架的应用

    windows 8 开发之开发平台与开发框架的应用 win8 App开发主要分成两部分,desktop app和metro app。右边蓝色的部分就是desktop app的部分,也是从win7延续过 ...

  • Win7下Windows Update错误并提示代码80072f9E如何处理

    Win7下Windows Update错误并提示代码80072f9E如何处理:windows update是现在大多数Windows操作系统都带有的一种自动更新工具,一般用来为漏洞、驱动、软件提供升级 ...

  • 三星手机相关查询测试代码分享

    最近收集了一些三星手机的测试代码,希望对大家有所帮助. 操作方法 01 1. *#06#:查询手机串号(IMEI) 2. *#1234#:查询固件版本号 3. *#0*#:进入工程模式 4. *#08 ...

  • 基于windows的源地址路由设置的3种方法

    一般的路由设置方式为目的路由,即对目的IP做匹配,若满足一定的规则,则把数据从某个网口发出去(同时也决定了目的MAC地址)。源地址路由,顾名思义,对源地址IP做匹配,若满足一定的规则,则把数据从某个网 ...

  • win7系统常见的蓝屏代码及解决方法

    我们在使用电脑的过程中,难免都会遇到各种各样的问题.电脑开机蓝屏,并且出现一大堆的错误代码,导致系统无法正常进入,这是不少朋友都有遇到过的问题.只有知道这些错误代码的意思,我们才能够对症下药.因此,今 ...

  • Win7蓝屏代码1000008E解决方法

    Win7蓝屏代码1000008E解决方法 问题反映:win7电脑在浏览网页时候出现蓝屏,使用的浏览器是IE 11,win7蓝屏代码008e,附上蓝屏日志信息,请帮助解决。 蓝屏日志如下: 代码如下: ...

  • Win7出现0×0000001E蓝屏代码的解决方法

    有时候遇到蓝屏只是短暂的故障,重启后还能使用,但最好立刻排除故障以绝后患.一网友的雨林木风Win7系统遇到了蓝屏,显示的代码为STOP:0×0000001E.这要怎么解决呢? 解决方法: 1.检查是否 ...

  • 用Windows Defender制作离线杀毒盘的方法

    在今天的win10系统使用教程中,我们将为大家分享一下使用系统自带的杀毒软件Windows Defender制作离线杀毒盘的方法.下面,还是一起来看看具体的操作步骤吧!更多教程,欢迎关注win10系统 ...