单元测试的功能自从MVC的第一个版本诞生的时候,就是作为一个重要的卖点来介绍的,通常在拿MVC与webform比较的时候,单元测试就是必杀底牌,把webform碾压得一无是处。

单元测试的重要性不用多说了,有单元测试的做兜底的项目,好比给开发人员买了份保险,当然这个保险的质量取决于单元测试的质量,那些一路Mock的单元测试,看起来很美,但是什么都cover不到。目前工作中的一个老项目,有2万多个单元测试用例,其中不少是用心之作,真正落实到了业务逻辑,开发人员可以放心的去修改代码,当然一切都必须按照TDD的原则来进行,具体就不详细说了。

接下来进入正题,单元测试这个重要的基础功能,在.NET Core中当然不能少,相关的API和组件提供的功能跟之前的版本没什么大的区别,主要在于需要对.NET Core的支持,说白了就是之前在.NET Framework平台下的代码,得重新生成支持.NET Core。比如本文要说到的xUnit,xUnit已经提供了对.NET Core的支持版本,下面我们来看看如何在ASP.NET Core中使用xUnit进行单元测试。

xUnit.Net介绍

xUnit.net的创造者的创造者是Jim Newkirk和Brad Wilson从包括NUnit及其它单元测试框架的使用经验中总结出来的一个新框架,相比于NUnit,xUnit.net有如下特点:

为每个测试方法产生一个对象实例

取消了[SetUp]和[TearDown]

取消了[ExpectedException]

类似于Aspect的功能

减少了自定义属性(Attribute)的数目

采用泛型

匿名委托

可扩展的断言

可扩展的测试方法

可扩展的测试类

xUnit.net的官方网站是:http://xunit.codeplex.com,下面是xUnit.net的运行界面:

注意在下载的xUnit.net压缩包内有4个支持GUI方式运行的exe文件,分别是:

xunit.gui.clr4.exe:用于在x64及.Net4.0下运行xUnit.net。

xunit.gui.clr4.x86.exe:用于在x86及.Net4.0下运行xUnit.net。

Xunit.gui.exe:用于在x64及.Net4.0以下版本运行xUnit.net。

xunit.gui.x86.exe:用于在x86及.Net4.0以下版本运行xUnit.net。

准备项目代码:

1.创建一个空白的ASP.NET Core web项目,命名为UseXunit。

2.然后修改project.json的内容如下,在dependencies的最后一行加入对MVC组件的依赖

"Microsoft.AspNetCore.Mvc": "1.0.1"

3.修改Startup.cs文件

在ConfigureServices方法加入services.AddMvc();

在Configure方法加入app.UseMvcWithDefaultRoute();

3.然后在项目根目录新建一个Controllers目录,并添加一个HomeController,代码如下

public class HomeController : Controller

{

public IActionResult Index()

{

return Content("Hello test");

}

}

4.到这里项目应该能跑起来了,运行后能看到输出Hello test,说明一个简单的项目已具备了。

加入单元测试项目

接下来加入单元测试项目,独立一个测试项目方便管理。

1.右键解决方案文件,然后选择新建一个解决方案文件夹,然后命名为test

2.在test目录下新建一个.NET Core项目,这里选择的项目类型是Class Library(.NET Core),命名项目名为UseXunit.Tests

3.然后修改Tests项目的project.json内容为如下

{

"version": "1.0.0-*",

"testRunner": "xunit",

"dependencies": {

"Microsoft.NETCore.App": {

"type": "platform",

"version": "1.0.0"

},

"xunit": "2.1.0",

"dotnet-test-xunit": "2.2.0-preview2-build1029",

"UseXunit": "1.0.0",

"Microsoft.AspNetCore.Mvc": "1.0.1"

},

"frameworks": {

"netcoreapp1.0": {

"imports": [ "dotnet5.6", "portable-net45+win8" ]

}

}

}

这里的改动几乎重写了系统默认生成的配置,系统默认的配置几乎跑不起来,需要重新设置。

dependencies引入了xunit,以及dotnet-test-xunit的运行支持package,当然也加入了对待测试项目的依赖(UseXunit)。

另外一个关键配置是指定了testrunner为xunit

保存之后会自动restore相关的packages。

4.现在可以开始创建TestCase

新建一个HomeControllerTest类,内容如下

public class HomeControllerTest

{

[Fact]

public void ShouldGetIndexResult()

{

var homeController = new HomeController();

var contentResult = homeController.Index() as ContentResult;

Assert.NotNull(contentResult);

Assert.Equal("Hello test", contentResult.Content);

}

}

这里就创建了一个基本的测试用例,然后使用你熟悉的快捷键Ctrl+U+R(Reshaper)就可以将test愉快地运行起来了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

Xunit编写单元测试程序java_ASP.NET Core中使用xUnit进行单元测试相关推荐

  1. 如何在ASP.NET Core中编写自定义日志记录提供程序

    目录 介绍 如何实现所需的接口 基础类和附件 FileLoggerProvider具体类及其附件 1. ConfigureLogging() 2. appsettings.json文件 介绍 源代码可 ...

  2. Java黑皮书课后题第8章:*8.34(几何:最右下角的点)在计算几何中经常需要从一个点集中找到最右下角的点。编写一个测试程序,提示用户输入6个点的坐标,然后显示最右下角的点

    *8.34(几何:最右下角的点)在计算几何中经常需要从一个点集中找到最右下角的点.编写一个测试程序,提示用户输入6个点的坐标,然后显示最右下角的点 题目 题目描述与运行示例 破题 代码 题目 题目描述 ...

  3. Java黑皮书课后题第8章:*8.27(列排序)用下面的方法实现一个二维数组中的列排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵

    *8.27(列排序)用下面的方法实现一个二维数组中的列排序.返回新数组,且原数组保持不变.编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵 题目 题目描述与运行示例 破 ...

  4. Java黑皮书课后题第8章:*8.26(行排序)用下面的方法实现一个二维数组中的行排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵

    *8.26(行排序)用下面的方法实现一个二维数组中的行排序.返回新数组,且原数组保持不变.编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵 题目 题目描述与运行示例 破 ...

  5. Java黑皮书课后题第8章:*8.1(求矩阵中各列数字的和)使用下面的方法头编写一个方法,求矩阵中特定列的所有元素的和。编写一个测试程序,读取3*4矩阵,显示每列元素的和

    *8.1(求矩阵中各列数字的和)使用下面的方法头编写一个方法,求矩阵中特定列的所有元素的和.编写一个测试程序,读取3*4矩阵,显示每列元素的和 题目 题目描述与运行示例 破题 代码 题目 题目描述与运 ...

  6. Java黑皮书课后题第7章:**7.34(对字符串中的字符排序)使用以下方法头编写一个方法,返回一个排序好的字符串。编写一个测试程序,提示用户输入一个字符串,显示排序好的字符串

    **7.34(对字符串中的字符排序)使用以下方法头编写一个方法,返回一个排序好的字符串.编写一个测试程序,提示用户输入一个字符串,显示排序好的字符串 题目 题目描述 破题 代码 运行实例 题目 题目描 ...

  7. Java黑皮书课后题第7章:**7.19(是否排好序了?)编写以下方法,如果参数中的list数组已经排好序了则返回true。编写一个测试程序,提示用户输入一个列表,显示该列表是否已经排好序

    7.19(是否排好序了?)编写以下方法,如果参数中的list数组已经排好序了则返回true.编写一个测试程序,提示用户输入一个列表,显示该列表是否已经排好序 题目 题目描述 破题 代码 题目 题目描述 ...

  8. Java黑皮书课后题第7章:7.15(消除重复)使用下面的方法头编写方法,消除数组中重复出现的值。编写一个测试程序,读取10个数,调用该方法,并显示以一个空格分隔的不同数字

    7.15(消除重复)使用下面的方法头编写方法,消除数组中重复出现的值.编写一个测试程序,读取10个数,调用该方法,并显示以一个空格分隔的不同数字 题目 题目描述与运行示例 破题 代码 21.11.11 ...

  9. Java黑皮书课后题第7章:*7.12(倒置数组)7.7节中的reverse方法通过复制到新数组实现倒置。改写方法将参数中传递的数组倒置,并返回该数组。编写一个测试程序,输入10个数字,倒置它们并显示

    7.12(倒置数组)7.7节中的reverse方法通过复制到新数组实现倒置.改写方法将参数中传递的数组倒置,并返回该数组.编写一个测试程序,输入10个数字,倒置它们并显示 题目 题目描述 破题 代码 ...

最新文章

  1. 用泰勒级数来估计函数的近似值
  2. 后台开发实用书籍--后台开发:核心技术与应用实践
  3. python开发环境spyder_spyder python 2.7-spyder(Python开发环境)下载 v2.1.10官方版--pc6下载站...
  4. boost::gregorian模块实现以天为单位显示到新年的时间量的测试程序
  5. 使用测微计收集应用程序指标
  6. 在一个数组中,如何确定所需元素在数组中的位置.
  7. ZBlog菜鸟精致灰黑简约风格MiNi主题
  8. 解释什么是计算机硬件和软件,什么叫软件,什么叫硬件?(要详细)
  9. VAX/VMS虚拟内存系统
  10. AndroidMPChart——BarChart
  11. coursera和udacity_从Udacity和Coursera进行深度学习
  12. word或excel打开很慢的处理办法
  13. 微信小程序学习记录——4.框架-视图层
  14. 7-56 福到了 (15 分)
  15. Android音频通信--简单演示程序
  16. R语言read.csv()读入行不规则数据
  17. 3D 小游戏《欢乐贪吃龙》关键技术盘点 | Cocos 技术派第13期
  18. RAP2-DELOS 开源社区版本 (后端 API 服务器)
  19. Erlang之父去世,忠告程序员:先思考再编程,累的时候不要写代码
  20. 战地指挥官 服务器维护,战地指挥官有哪些常见问题以及解决方法

热门文章

  1. 零基础制作平衡小车【连载】8---位置式PID和增量式PID
  2. 多级队列调度算法可视化界面_模拟多级反馈队列调度算法原理(源程序c++)
  3. 测试一篇文章测试一篇文章
  4. jQuery: 判断checkbox复选框是否被选中
  5. 计算机桌面是哪个文件夹,win7旗舰版 桌面背景在哪个文件夹
  6. Swagger UI文件上传
  7. 微服务(二)服务拆分及远程调用
  8. latex bibitem格式引用文献到bib文件
  9. windows8网络和共享中心无法找到各种网络适配器的解决方案
  10. (PCB系列三)AD六层板布线经验累积