用Msbuild跑Xunit单元测试

Rhoda ·
更新时间:2024-11-13
· 895 次阅读

  用了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。

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

 



msbuild xunit 测试

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章