我正在寻找一个命令行或GUI工具,它可以将更改后的程序集从解决方案复制到一个单独的文件夹中,这样之后的新构建就不会影响测试运行。之后,它应该执行一组可配置的测试(只有特定的程序集,并过滤特定的TestCategories)。完成后,应显示测试结果。
有没有一个工具或一套工具可以完成这些任务?MsTest.exe可以运行测试,但不能复制所有必需的程序集。
将MsTest命令行工具(或visual studio运行程序)与构建后步骤结合使用以在本地复制程序集是不好的,因为这会减慢每次构建的速度,但我不会在每次构建解决方案时都在本地运行测试。我可以写一个小脚本,预先在本地复制必要的程序集。但我所希望的是一个不用写剧本就能完成这一切的工具。
复制文件
要从命令行复制程序集,可以使用标准复制命令。只复制"更改的"程序集比较困难,除非您正在进行增量生成。
xcopy,copy就足够了。
MsBuild是您可以用来复制文件的另一个工具。您可以创建不在Visual Studio中运行的生成后事件或自定义目标。它只会在您设置特定条件或从命令行显式调用目标时运行。
方便的事实是MsBuild至少知道构建文件需要哪些文件。请注意,MsBuild现在可能确切地知道运行测试需要什么。某些配置文件和第三方引用的依赖关系可能也需要,但不是项目的一部分。
我不知道还有其他工具。我个人会选择写一个简单的脚本,因为它并不难做和维护。
运行测试
有一个命令行vstest.console.exe
,它将愉快地运行基于MsTest的测试。
语法如下:
vstest.console.exe /TestCaseFilter:[ expression ] assemblyone.dll assembly2.dll
注1
每次运行MsBuild生成程序集以生成项目时,即使生成的所有MSIL都相同,程序集也会不同,因为编译器会为文件分配一个新的唯一GUID。
因此,除非您的构建是增量的,并且检测到没有必要从一开始就实际构建文件,否则它每次都会生成唯一的文件。
注2
事实上,正如其他提到的,像tfsbuild或teamcity这样的持续集成工具可以帮助您构建和运行测试,并为您创建一个好的报告。
更高级的工具,如ms发布管理或octopus部署,可以在进行连续交付或更好的连续部署时,在部署工作流中运行测试。
我认为您正在描述一个团队集成系统。
您可以使用MS Team Build或visualstudio.com.的在线版本
另一个流行的选择是TeamCity
这两者都允许您配置它们,以便它们触发运行测试的构建(或基于类别的测试子集)。如果构建失败或测试失败,您可以选择对此做出反应(例如拒绝签入)