使用Visual Studio 2013进行单元测试--初级篇
1.打开VS2013 --> 新建一个项目。这里我们默认创建一个控制台项目。取名为UnitTestDemo
2.在解决方案里面新增一个单元测试项目。取名为UnitTestDemoTest
创建完毕后项目结构大概如下:
3.进入控制台项目UnitTestDemo的Program类,创建一个Add方法。
namespace UnitTestDemo
{
class Program
{
static void Main(string[] args)
{
}
public static int Add(int num1, int num2)
{
return num1 + num2;
}
}
}
4.我们的目的就是测试上面的Add方法运行是否正常,返回结果是否正确。
5.在单元测试项目中引用控制台项目,引用完毕后项目结构如下:
6.单元测试项目里面UnitTest1这个类的名字取得太难看了,我们把名字改为ProgramTest,表明这是在测试Program类。改完如下:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestDemoTest
{
[TestClass]
public class ProgramTest
{
[TestMethod]
public void TestMethod1()
{
}
}
}
7.上面就是VS为ProgramTest类默认生成的方法。可以看到ProgramTest具有一个【TestClass】特性,表明这是一个测试类。TestMethod1具有一个【TestMethod】特性,表明这是一个测试方法。
8.可以这样理解,一个方法必须具有【TestMethod】特性,且其所属的类具有【TestClass】特性,那么这个方法才会被VS承认为一个【单元测试方法】。
如果没有上面的两个特性中的一个,编译生成是没有任何问题的。但是VS不会把其作为一个【单元测试方法】。
9.“VS不把一个方法作为【单元测试方法】”是什么意思呢?
依次点击VS的菜单栏【测试】--> 【窗口】-->【测试资源管理器】,可以打开测试资源管理器。
10.测试资源管理器里面会显示当前解决方案里面的所有单元测试。说明白点就是这里只显示符合【第8点】要求的方法。
你可能会说,为什么上面的图里面什么都没显示,【TestMethod】特性和TestClass】特性现在不是都有吗?
原因是你还没有生成程序集。OK,按F6.就可以看到【测试资源管理器】中显示了【TestMethod1】:
11.我们要清楚我们创建单元测试的初衷:是用工具帮助我们测试软件的质量、稳定性、性能等等。【VS】在这里就充当了工具的作用。
12.回到命名的问题,很明显TestMethod这个名字太难看了,我们把它改成AddTest表示这是在测试Add方法。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestDemoTest
{
[TestClass]
public class ProgramTest
{
[TestMethod]
public void AddTest()
{
}
}
}
13.截止目前,我们已经建立了一个可以执行的测试框架,虽然没有起到什么作用,但是测试已经可以执行了。
执行测试的方法之一是:右键点击需要测试的【单元测试】方法的名称,选择运行:
运行测试之后,可以在测试资源管理器中查看测试的结果:
执行单元测试的方法有很多,这些需要我们在不断的学习中去体会。
14.接下来我们做一点有意义的事情。改进AddTest方法:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestDemoTest
{
[TestClass]
public class ProgramTest
{
[TestMethod]
public void AddTest()
{
int num1 = 100;
int num2 = 200;
Assert.AreEqual(Program.Add(num1, num2), 300);
}
}
}
在这之前,请把Program类的可见性改为internal或者Public。
?15.“Assert”之前没接触过单元测试的朋友,或者英语差点的可能不认识。上谷歌翻译:
清楚的看到,“Assert”的意思是“断言”。所以“Assert.AreEqual(Program.Add(num1, num2), 300);”这句话的意思就是:我断言“Program.Add(num1, num2)”的结果就是300。
而断言的正确与否只需要通过测试工具测试即可。如果测试通过说明此断言是正确的,反之就说明这个测试失败了。
断言有很多种,包括上面普通的Assert,还有字符串断言,集合断言等等。
16.ok,运行测试可以看到测试通过。
17.如果上面所说的你都明白,那么到这里为止,你可以自己编写简单的单元测试代码并执行测试了。
最后还有一个要说的就是,如果你觉得手动编写单元测试类和方法太麻烦,那么可以使用“Unit Test Generator”插件帮助你生成单元测试和方法。
这样你可以把重心偏到编写测试逻辑上。
“Unit Test Generator”可以通过VS菜单栏【工具】-->【扩展和更新】-->搜索““Unit Test Generator””取得。
18.安装“Unit Test Generator”需要重启VS。
在需要进行单元测试的类和方法上点击右键,如图操作(图中演示的是生成单元测试方法)
点击之后会弹出一个对话框,需要你配置一个名称的规则,配置好后点击ok即可生成测试方法。
19.最后希望大家养成随时测试代码的好习惯。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 动态规划之钢条切割问题:自顶向下(Python实现)
- 动态规划之钢条切割问题:自低向上(Python实现)
- Docker中安装Centos7操作系统
- 机器重启后 docker 容器启动报错 error creating overlay mount to
- 如何使用地图开发相应的产品
- 「2020最新」Spring最易学习教程—IOC 以及 整合Struts2
- SAAS| AbstractRoutingDataSource
- 【DB笔试面试847】在Oracle Windows中,错误“ORA-12560: TNS: 协议适配器错误”的常见原因有哪些?
- MUI框架中使用百度地图(全网独一份最详细的图文教程)
- 0792-5.16.2-如何通过Hive跨集群迁移Kudu表
- [解决]Docker中安装Centos7后无法正常使用命令
- 毕业设计之「测试实验及结果分析」(一)
- 【DB笔试面试845】在Oracle中,sqlnet.ora文件的作用是什么?
- 安卓-无敌解决ListView添加标题头无法正常显示的问题(歪门邪道)
- 贪心算法-活动选择问题(Python实现)