详解Windows 8 开发之测试代码的使用教程
发布时间 - 2017-05-24 00:00:00 点击率:次本篇文章介绍了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() {
} }}
注意以下事项:
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;
// 当前测试类运行第一个测试方法之前执行,类似于
构造函数
[ClassInitialize]
public
static
void MyClassInit(TestContext context)
{
}
// 所有测试方法运行完毕后执行,类似于
析构函数
[ClassCleanup]
public static void MyClass
End
()
{
}
//每个测试方法运行之前执行
[TestInitialize]
public void Init()
{
a = 1;
b = 1;
}
//每个测试方法运行之后执行
[TestCleanup]
public void End()
{
a = 0;
b = 0;
}
}
}
注意:以上方法,方法名可以自定义,无返回值,除了[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 MyTestProjec
t;
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);
}
}
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);
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;
}在测试资源管理器中,选择“全部运行”以测试已纠正的方法,并确保您未引入回归测试。所有测试都将通过。
【相关推荐】
1. Windows7下的Java开发环境搭建步骤(图解)
2. Windows系统下安装Ulipad编辑器
3. 使用Python开发windows桌面程序
4. 教你如何在Windows环境下安装python2和python3两个版本
# 器中
# 资源管理
# 应用程序
# 都将
# 新建项目
# 将不
# 类似于
# 命名为
# 创建一个
# 并使
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现模型的全局作用域?(Global Scope示例)
黑客入侵网站服务器的常见手法有哪些?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
Android中AutoCompleteTextView自动提示
微信小程序 canvas开发实例及注意事项
利用 Google AI 进行 YouTube 视频 SEO 描述优化
香港服务器WordPress建站指南:SEO优化与高效部署策略
Bootstrap整体框架之JavaScript插件架构
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
Laravel如何使用Blade模板引擎?(完整语法和示例)
b2c电商网站制作流程,b2c水平综合的电商平台?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
微信推文制作网站有哪些,怎么做微信推文,急?
iOS验证手机号的正则表达式
如何在Tomcat中配置并部署网站项目?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
php json中文编码为null的解决办法
浅述节点的创建及常见功能的实现
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
java中使用zxing批量生成二维码立牌
网站制作报价单模板图片,小松挖机官方网站报价?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Laravel如何使用查询构建器?(Query Builder高级用法)
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
如何解决hover在ie6中的兼容性问题
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
,网页ppt怎么弄成自己的ppt?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
使用C语言编写圣诞表白程序
如何在搬瓦工VPS快速搭建网站?
Java遍历集合的三种方式
如何用IIS7快速搭建并优化网站站点?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
Laravel如何使用withoutEvents方法临时禁用模型事件
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Laravel如何实现文件上传和存储?(本地与S3配置)
Laravel如何处理和验证JSON类型的数据库字段
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
下一篇:优酷MKV转AVI格式教程
下一篇:优酷MKV转AVI格式教程

