• 用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="..packagesxunit.MSBuild.1.9.2.3uildxunit.MSBuild.targets" 
    Condition="Exists('..packagesxunit.MSBuild.1.9.2.3uildxunit.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)..	oolsxunit.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。

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

  • 相关阅读:
    SSL JudgeOnline 1194——最佳乘车
    SSL JudgeOnline 1457——翻币问题
    SSL JudgeOnlie 2324——细胞问题
    SSL JudgeOnline 1456——骑士旅行
    SSL JudgeOnline 1455——电子老鼠闯迷宫
    SSL JudgeOnline 2253——新型计算器
    SSL JudgeOnline 1198——求逆序对数
    SSL JudgeOnline 1099——USACO 1.4 母亲的牛奶
    SSL JudgeOnline 1668——小车载人问题
    SSL JudgeOnline 1089——USACO 1.2 方块转换
  • 原文地址:https://www.cnblogs.com/dudu/p/msbuild-xunit.html
Copyright © 2020-2023  润新知