用了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窗口显示单元测试的结果:

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

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

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

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

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

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

  1. xunit 单元测试

    代码:GitHub 参考地址:https://github.com/Acumatica/xunit.autofac xunit +autofac进行单元测试 ①创建一个类库 引用nuget: xuni ...

  2. 轻松掌握VS Code开发.Net Core及创建Xunit单元测试

    前言 本篇文章主要还是介绍使用 VS Code 进行.Net Core开发和常用 CLI命令的使用,至于为啥要用VS Code ,因为它是真的是好看又好用 :) ,哈哈,主要还是为了跨平台开发做准备. ...

  3. ABP Xunit单元测试 第五篇

    1.创建如下的项目结构 public class TestName { public bool ValidateName(string Name) { if (Name == "yin&qu ...

  4. VS2015 使用Xunit来进行单元测试

    安装Xunit: Xunit的安装现在不需要插件支持了,直接使用NuGet安装如下两个库即可: PM> Install-Package xunit PM> Install-Package ...

  5. 使用xUnit为.net core程序进行单元测试(上)

    一. 导读 为什么要编写自动化测试程序(Automated Tests)? 可以频繁的进行测试 可以在任何时间进行测试,也可以按计划定时进行,例如:可以在半夜进行自动测试. 肯定比人工测试要快. 可以 ...

  6. 使用xUnit为.net core程序进行单元测试(1)

    导读 为什么要编写自动化测试程序(Automated Tests)? 可以频繁的进行测试 可以在任何时间进行测试,也可以按计划定时进行,例如:可以在半夜进行自动测试. 肯定比人工测试要快. 可以更快速 ...

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

    还记得 .NET Framework 的 ASP.NET WebForm 吗?那个年代如果要在 Web 层做单元测试简直就是灾难啊..NET Core 吸取教训,在设计上考虑到了可测试性,就连 ASP ...

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

    本文使用xUnit对ASP.NET Core WebAPI做单元测试,使用HttpClient的同步和异步请求,下面详细介绍xUnit的使用过程: 一.创建示例项目 模板为我们自动创建了一个Value ...

  9. .NET Core 性能分析: xUnit.Performance 简介

    xunit-performance 是xUnit的一个扩展, 使用它可以对.NET Core项目进行性能测试. 官网:https://github.com/Microsoft/xunit-perfor ...

随机推荐

  1. ajax执行完成后,再执行下面的代码的解决办法

    一般ajax设置的都是异步的,但是有时候我们有这种需求,就是等ajax执行完成之后,在执行下面的函数. 1设置async:false 在jq中直接设置了ajax是异步的还是同步的 一般如果不写这个,默 ...

  2. MyBatis关联查询,表字段相同,resultMap映射问题的解决办法

    问题描述:在使用mybatis进行多表联合查询时,如果两张表中的字段名称形同,会出现无法正常映射的问题. 问题解决办法:在查询时,给重复的字段 起别名,然后在resultMap中使用别名进行映射. 给 ...

  3. 树莓派USB摄像头与camera模块对比

    http://www.cnblogs.com/weixinforspurs/p/5575962.html ——————————————————————————————————————————————— ...

  4. VC++ 标准C++中的string类的用法总结

    相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...

  5. html 表格的制作

    表格的制作 表格<table></table> <table  width=""  height=""  align=" ...

  6. JSP如何保存页面上众多的复选状态

    一.描述: 最近写的一个问题管理模块,录入问题时需要选择客户(也就是那些客户存在这些问题),当保存完问题后,再次编辑问题时,如何从数据库里读取上次选中的客户并展示位勾选状态呢?问题表cust_ques ...

  7. 友盟分享SDK集成步骤

    1.官方注册appID. 2.menifest添加和声明umeng相关的activity以及appKey. 3. // 首先声明一个controller变量,由友盟服务工厂类直接取得友盟社交服务. m ...

  8. hdu4738 Caocao's Bridges

    http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意:曹操赤壁之战大败,于是卷土重来.为了避免水上作战,他在长江上建立了一些岛屿,这样他的士兵就可以在 ...

  9. POJ 2175 Evacuation Plan 费用流 负圈定理

    题目给了一个满足最大流的残量网络,判断是否费用最小. 如果残量网络中存在费用负圈,那么不是最优,在这个圈上增广,增广1的流量就行了. 1.SPFA中某个点入队超过n次,说明存在负环,但是这个点不一定在 ...

  10. grep 相关

    1) -q 参数,本意是 Quiet; do not write anything to standard output.  Exit immediately with zero status if ...