用msbuild跑xunit单元测试

用了Visual Studio 2015之后,发现没法跑xUnit单元测试,xUnit.net runner不支持VS2015,TestDriven.Net也不支持VS2015。

等它们支持VS2015,不知要等到猴年还是要等到马月。于是今天决定不等了,尝试用msbuild跑单元测试解决这个问题。

nuget上一搜,发现已经有人提供了xunit.MSBuild,直接用它就可以了。

在单元测试项目中安装这个nuget package:

Install-Package xunit.MSBuild

发现对应的.csproj文件中增加了如下的配置:

<Import Project="..\packages\xunit.MSBuild.1.9.2.3\build\xunit.MSBuild.targets"
Condition="Exists(‘..\packages\xunit.MSBuild.1.9.2.3\build\xunit.MSBuild.targets‘)" />

xunit.MSBuild.targets文件中的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\tools\xunit.runner.msbuild.dll" TaskName="Xunit.Runner.MSBuild.xunit" />

  <PropertyGroup Condition="‘$(RunXunitTests)‘ == ‘‘">
    <RunXunitTests Condition="‘$(Configuration)‘ == ‘Release‘">true</RunXunitTests>
  </PropertyGroup>

  <PropertyGroup>
    <BuildDependsOn>$(BuildDependsOn);ExecuteXUnitTests</BuildDependsOn>
    <RebuildDependsOn>$(RebuildDependsOn);ExecuteXUnitTests</RebuildDependsOn>
  </PropertyGroup>

  <Target Name="ExecuteXUnitTests" Condition="‘$(RunXunitTests)‘ == ‘true‘" >
    <xunit Assembly="$(OutputPath)$(AssemblyName).dll" />
  </Target>
</Project>

从这个msbuild的配置中可以看出,ExecuteXUnitTests就是跑单元测试的msbuild命令,触发条件是当项目以Release方式编译。

然后,只需修改一下.csproj中的配置,在项目编译后调用这个ExecuteXUnitTests命令即可:

<Target Name="AfterBuild">
ExecuteXUnitTests
</Target>

这样配置后,编译时会在Visual Studio的Output窗口显示单元测试的结果:

37> PostModelTest.PostModel_Required_Validation
37> Tests: 1, Failures: 0, Skipped: 0, Time: 0.410 seconds
37>
37>Build succeeded.

如果单元测试失败,会这样的显示:

1>    Tests: 1, Failures: 1, Skipped: 0, Time: 0.428 seconds
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:03.91
========== Build: 0 succeeded, 1 failed, 42 up-to-date, 0 skipped ==========

Visual Studio的状态栏也会显示Build failed。

这样的显示效果虽然不是很直观,但是在编译时就运行单元测试挺方便,而且单元测试失败会让编译失败,这样更突显单元测试的重要性。

时间: 2024-11-09 00:12:25

用msbuild跑xunit单元测试的相关文章

使用 xUnit 编写 ASP.NET Core 单元测试

还记得 .NET Framework 的 ASP.NET WebForm 吗?那个年代如果要在 Web 层做单元测试简直就是灾难啊..NET Core 吸取教训,在设计上考虑到了可测试性,就连 ASP.NET Core 这种 Web 或 API 应用要做单元测试也是很方便的.其中面向接口和依赖注入在这方面起到了非常重要的作用. 本文就来手把手教你如何用 xUnit 对 ASP.NET Core 应用做单元测试..NET Core 常用的测试工具还有 NUnit 和 MSTest,我本人习惯用 x

写单元测试的知识结构(2)——单元测试工具的选用(找个顺手的)

一般的新技术手段的应用分三步(我总结的),问题适配(读书.问人,这时一般处于迷茫状态,尽量避免被煽动被诱惑是很重要的,少讲些主义,多研究问题).选择工具(一般都有现成的,除了你玩创新(也创新不到哪去)或在Google这种老遇见没人碰到过的问题的地方搞新技术),测试可用性,也就是能不能解决问题(有哥们管这叫趟坑)),经过这三部,基本就可以投入应用了. 这篇基本属于选择工具的一个过程,陈述一些对我选用的测试工具的看法,也包括一些想和做怎么结合的看法,有不同看法欢迎大家拍砖.   如果是固定平台,网上

开发人员必备技能:单元测试

说起软件测试四个字,想必大家脑海中浮现的有集成测试.系统测试.黑盒测试.白盒测试等,可能就是没想到会有单元测试. 对于大学是学习软件工程专业出身的同学来说可能会听过这四个字,对工作好几年的职场老鸟可能也听过但是没实际用过居多.绝大多数的开发人员都是忙于把手头的工作开发好,并不会把单元测试纳入工作范畴,他们会说,我连功能开发都忙不过来了,哪有时间去做单元测试,况且还要写测试代码,那不是重复写一篇代码功能吗?但,单元测试真的不值得花时间去做吗,那是因为可能你并不清楚单元测试的投入产出比有多高,下面就

浅谈单元测试

什么是单元测试 单元测试本质上也是代码,与普通代码的区别在于它是验证代码正确性的代码.可简单做个定义:单元测试是开发人员编写的.用于检测在特定条件下目标代码正确性的代码. 软件开发天生就具有复杂性,没人敢打包票说自己写的代码一点问题都没有,或者不经测试就能保证代码正确运行,可能你在这个执行路径下能够执行,殊不知还有其他路径,有一一去验证过吗,因此,要保证程序的正确性就必须要对我们代码进行严格测试. 举个简单例子:比如有个计算类,里面有个 add 方法,操作就是两个数进行相加. public cl

架构之路:性能与单元测试

似乎程序员都是急性子,或许是被windows冗长的开机时间折磨够了,有可能是因为提升性能的效果是最显而易见的……总之,我发现,绝大部分程序员对性能的关注和热情是无与伦比的! C#刚刚推出的时候,就有人摇头晃脑的说,“嗯,自动垃圾回收,性能不行吧?” DataSet横空出世,马上有很多人写代码,在DataSet里插入几百万条数据,证明DataSet的性能问题 Linq当然更要被骂了,尼玛用反射?反射是什么,同学们知道么?性能大老虎呀!更不用说那些自动生成的sql了,有我手写的高效么? …… 所以直

在.NET开发中的单元测试工具之——NUnit

NUnit介绍 NUnit是一个专门针对于.NET来写的单元测试框架,它是xUnit体系中的一员,在xUnit体系中还有针对Java的JUnit和针对C++的CPPUnit,在开始的时候NUnit和xUnit体系中的大多数的做法一样,仅仅是将Smalltalk或者Java版本转换而来,但是在.NET2.0之后它加入了一些特有的做法.NUnit的官方网站是:http://www.nunit.org/,目前的最新版本是:2.6.2. NUnit下载与安装 NUnit的每个版本都提供了两种形式的下载:

自动执行单元测试maven插件

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <!--指定需要跑的单元测试--> <includes> <include>**/*Documentation.java</include> </inc

【转】各位都是怎么进行单元测试的?

原文:https://www.zhihu.com/question/27313846/answer/130954707 工作中写C++,不敢自称大神,也来斗胆分享(安利)一下经常使用的单元测试框架. 大家都对Google的C++ Style很熟悉了,但除了Coding Style之外,Google还有自己的单元测试框架:gtest (Google Test)和gmock (Google Mock). 简介gtest的英文Unit Testing C++ with Google Test - Re

Google Test测试框架分析

Google Test测试框架分析 一.简介 Google Test是由Google主导的一个开源的C++自动化测试框架,简称GTest.GTest基于xUnit单元测试体系,和CppUint类似,可以看作是JUnit.PyUnit等对C++的移植. 下图是GTest测试框架的测试过程,表示的是GTest的两种测试方式. 下面将使用一个极其简单的例子表示xUnit测试的主要过程.如对Hummer的CTXString类的成员方法GetLength进行测试.详见下面GTest代码和注释说明. //