使用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.最后希望大家养成随时测试代码的好习惯。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

rpc框架之 thrift 学习 1 - 安装 及 hello world

thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(当然,除了二进制,也支持json等常用序列化机制),官网地址:htt...

2639
来自专栏微信公众号:Java团长

Java中的锁原理、锁优化、CAS、AQS

结论:如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。

661
来自专栏Kirito的技术分享

Spring Boot Dubbo应用启停源码分析

Dubbo Spring Boot 工程致力于简化 Dubbo RPC 框架在Spring Boot应用场景的开发。同时也整合了 Spring Boot 特性:

1232
来自专栏用户2442861的专栏

2015百度一道面试题引发的思考(shell脚本和网络)

原文    http://blog.csdn.net/chhuach2005/article/details/40044863

863
来自专栏猛牛哥的博客

快手(AAU)更新记录v2.9.1.23

1737
来自专栏微信公众号:Java团长

成为Java顶尖程序员,先过了下面问题!

661
来自专栏移动开发面面观

Android并发备忘录

1793
来自专栏Seebug漏洞平台

从补丁到漏洞分析——记一次joomla漏洞应急

作者:LoRexxar'@知道创宇404实验室 2018年1月30日,joomla更新了3.8.4版本,这次更新修复了4个安全漏洞,以及上百个bug修复。 ht...

33212
来自专栏Seebug漏洞平台

D-Link DIR-605L 拒绝服务错误报告 (CVE-2017-9675)

原文:http://hypercrux.com/bug-report/2017/06/19/DIR605L-DoS-BugReport/ 译者:Serene ...

3456
来自专栏Android群英传

看ASM在代码中的强势插入

2133

扫码关注云+社区