所谓的单元测试(Unit Test),就是对软件的一些模块进行测试以检查其正确性和可靠性,这些模块可以是一个类或者是一个方法等。在Visual studio中,这十分容易实现。

打开Visual studio,文件->新建->项目,在此演示的是为通用Windows平台创建单元测试,因此展开Visual C#->Windows->通用->单元测试应用(通用Windows)。如图,

这里单元测试的项目名为UnitTest4Demo

创建完成后,为了使条理清晰,我们在解决方案中新建一个类库(ClassLibrary),将要测试的方法放在类库中,而UnitTest4Demo调用放在类库中的待测试方法。

右击解决方案->添加->新建项目->类库(通用Windows),如图

类库取名为ClassLibrary4Test

创建完成后,解决方案管理器里应类似下图

刚刚已经说了,类库里面放待测试方法,UnitTest4Demo负责调用并测试类库中的方法,因此UnitTest4Demo应引用ClassLibrary4Test。右击UnitTest4Demo下的引用->添加引用->勾选ClassLibrary4Test,如图

确定后,UnitTest4Demo下的引用应类似下图,注意:红线的部分就是刚刚添加的对类库的引用

现在,在类库ClassLirary4Test中的Class1.cs中写个方法,简单起见,就让这个方法返回个0

   public class Class1
{
public static int ReturnZero()
{
return ;
}
}

接着,在UnitTest4Demo中UnitTest.cs中的TestMethod1方法中调用此函数,如图

在这个UnitTest1类中,第一点,我们注意到UnitTest1被添加了TestClass属性类,方法TestMethod1被添加了TestMethod属性类,这就是用来单元测试的类和函数与一般的类和函数不同之处,这就告诉了Visual Studio我这个函数是用来测试的,Visual Studio就会将这个带有TestClass属性的类下的,带有TestMethod属性的方法放到测试资源管理器中(测试资源管理器展开方法:菜单栏->测试->窗口->测试资源管理器)

第二点就是这个函数里面就写了一句话,Assert是用于单元测试“断言”的类,即我输入一些参数(当然此示例没有输入参数),如果方法运行正确我“断言”应得到的结果,如果不符,Visula studio在测试后会给出相关的信息,这就达到了测试的效果。当然这个类有很多的重载,参见MSDN:Assert类

我们会注意到,此时测试资源管理器空空如也,并没有TestMehod1方法,这是我们没有生成解决方法的原因,现在生成解决方案:菜单栏->生成->生成解决方案

生成之后,测试资源管理器中会出现TestMehod1方法,如图

下面执行测试,右击测试单元管理器中的TestMethod1->运行选定的测试

稍等片刻,将会出现通过测试。

至此,一个简单的单元测试完成了。

你可以在单元测试中测试更多,更复杂的方法,下面就展示一个稍微复杂一些的用于测试通用应用的网络通信的示例。

在ClassLibrary4Test类库中新建一个HttpHelper类,类中写个用于Get请求的方法。

    public class HttpHelper
{
/// <summary>
/// Send Get request and retrieve the response as a string
/// </summary>
/// <param name="url">url</param>
/// <returns>response</returns>
public static async Task<string> SendGetRequest(string url)
{
HttpClient httpClient = new HttpClient();
Uri uri = new Uri(url);
HttpResponseMessage response = new HttpResponseMessage();
string httpResonseBody = string.Empty;
try
{
response = await httpClient.GetAsync(uri);
response.EnsureSuccessStatusCode();
httpResonseBody = await response.Content.ReadAsStringAsync();
}
catch
{ }
return httpResonseBody;
}
}

在UnitTest4Demo的UnitTest.cs中新写个方法TestMothod_Http,调用刚写的SendGetRequest方法。

     [TestMethod]
public async Task TestMethod_Http()
{
string url = "http://mywebapidemo.azurewebsites.net/api/Default";
string response = await HttpHelper.SendGetRequest(url);
Assert.AreEqual("Hello,World!", response.Replace("\"", "")); }

生成解决方案,和刚刚一样,测试资源管理器中在生成会出现TestMethod_Http,测试之,可以顺利通过测试。

在Visual Studio2015中使用单元测试的更多相关文章

  1. Visual Studio 中的单元测试 UNIT TEST

    原文:Visual Studio 中的单元测试 UNIT TEST 注:本文系作者原创,可随意转载,但请注明出处.如实在不愿注明可留空,强烈反对更改原创出处.TDD(Test-Driven Devel ...

  2. Visual Studio中UnitTesting单元测试模板代码生成

             在软件研发过程中,单元测试的重要性直接影响软件质量.经验表明一个尽责的单元测试方法将会在软件开发的某个阶段发现很多的Bug,并且修改它们的成本也很低.在软件开发的后期阶段,Bug的发 ...

  3. visual studio2015中开发python

    之前下载了visual studio2017但是发现很不好用,不如使用matlab与visual studio混合编程就根本找不到visual studio,只有下了visual studio2015 ...

  4. visual studio中创建单元测试

    1 打开  工具--自定义 2 选择 上下文菜单--编辑器上下文菜单|代码窗口 3 在这里我们可以看到“创建单元测试”这个菜单了,将它移到运行测试菜单下面 4 关闭VS并重启 重启后再对着类名,点击右 ...

  5. 在visual studio2015中使用easyX画图

    配置:解压EasyX压缩包: 将文件内的include,lib,lib/amd64下的文件拷贝到visualstudio中VC文件夹内对应的地方: 然后再执行上图中的Setup.hta进行安装: 在v ...

  6. Python 在Visual studio 中做单元测试进行TDD开发

    Unit Tests Steve Dower edited this page on 14 Jul · 3 revisions Pages 38 Home Azure Remote Debugging ...

  7. Visual Studio2015 、2017中如何支持MYSQL数据源

    原文:Visual Studio2015 .2017中如何支持MYSQL数据源 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/ght886/arti ...

  8. .net持续集成单元测试篇之单元测试简介以及在visual studio中配置Nunit使用环境

    系列目录 单元测试及测试驱动开发简介 什么是单元测试 单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验.单元测试几乎都是用单元测试框架编写的.单 ...

  9. Visual Studio2015安装过程以及单元测试

    安装环境: 安装版本: Visual Studio2015 安装过程: 因为我是在第一次老师安排的作业的时候感觉VC++6.0不如VS方便所以才装的Visual Studio2015,又安装了点插件, ...

随机推荐

  1. 《iOS开发全然上手——使用iOS 7和Xcode 5开发移动与平板应用》之Objective-C新手训练营

    编写Hello World应用程序通常被觉得,是学习不论什么编程语言的第一步.在这一章,你将创建iOS版的Hello World应用程序作为起步,高速了解Xcode这个开发iOS应用程序的主要工具. ...

  2. 【t087】公共汽车

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 路人丁成为了一名新公交车司机,每个司机都有一张牌子,牌子的正面写了拥有这个牌子的司机开的线路号,另外一 ...

  3. 比较好的Redux和React-Redux学习资料

    1.Redux 莞式教程.本教程深入浅出,配套入门.进阶源码解读以及文档注释丰满的 Demo 等一条龙服务https://github.com/kenberkeley/redux-simple-tut ...

  4. 一个简易版的Function.prototype.bind实现

    重新看<JavaScript设计模式与开发实践>一书,第32页发现个简易版的Function.prototype.bind实现,非常容易理解,记录在这了. Function.prototy ...

  5. ASP.NET Core & Docker & Jenkins 零基础持续集成实战

    原文:ASP.NET Core & Docker & Jenkins 零基础持续集成实战 一.本系列教程说明 源代码管理工具:Gogs 持续集成工具:Jenkins 容器:Docker ...

  6. C++中的类与对象模型

    一,C/C++内存模型 1.内存模型分类 栈区:由编译器自动分配和释放,用来存放函数的参数,局部变量.存放在栈中的数据只在当前函数及下一层函数中有效,函数一旦结束,这些数据就被释放了. 堆区:由程序员 ...

  7. Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库

    下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...

  8. sqlserver中获取最后一个字符所在的位置

    CHARINDEX('字符',reverse(字段名称)) 这个意思就是将字段进行反转,就是从后往前取,这样就能够获取一个字符最后所在的位置

  9. matlab 基础知识class &lt; superclass_name

    matlab中的class,在matlab中也能够通过创建类的方式实现面向对象编程. 1)类定义 >> classdef (attribute1 = value,...) classnam ...

  10. [转]TensorFlow如何进行时序预测

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组 ...