如何在Teamcity上使用ApprovalTests?

the*_*ric 12 .net c# teamcity continuous-integration approval-tests

我正在使用审批测试.在我的开发机器上DiffReporter,当我的测试结果与批准的不同时,我很高兴开始使用TortoiseDiff:

    [UseReporter(typeof (DiffReporter))]
    public class MyApprovalTests
    { ... }
Run Code Online (Sandbox Code Playgroud)

但是,当在Teamcity上运行相同的测试并且结果不同时,测试将失败,并显示以下错误:

System.Exception : Unable to launch: tortoisemerge.exe with arguments ...
Error Message: The system cannot find the file specified
---- System.ComponentModel.Win32Exception : The system cannot find the file 
                                                                 specified
Run Code Online (Sandbox Code Playgroud)

显然它找不到tortoisemerge.exe,这很好,因为它没有安装在构建代理上.但是如果它被安装了怎么办?然后对于每个失败,另一个tortoisemerge.exe实例将启动,没有人会关闭它.最终吨的tortoisemerge.exe实例将杀死我们的服务器:)

所以问题是 - 如何修改测试以在本地机器上运行Tortoise Diff并仅在构建服务器上报告错误?我知道 #IF DEBUG [UseReporter(typeof (DiffReporter))]但如果可能的话会更喜欢另一种解决方案.

lle*_*lco 9

记者和CI的问题有几个解决方案.我将列出所有这些,然后指向一个更好的解决方案,这还没有完全启用.

  1. 使用AppConfigReporter.这允许您在AppConfig中设置报告者,并且可以使用QuietReporter for CI.这里有一个视频,还有很多其他的记者.AppConfigReporter出现在6:00.这具有单独配置的优点,您可以在程序集级别进行装饰,但缺点是如果在类/方法级别覆盖,则仍然存在问题.

  2. 创建自己的(2)记者.值得注意的是,如果您使用记者,它将被调用,无论它是否在环境中工作.IEnvironmentAwareReporter允许复合记者,但不会阻止直接调用记者.很可能你需要2个记者,一个什么都不做(比如一个安静的记者)但只能在你的CI服务器上工作,或者在TeamCity调用时.将其称为TeamCity Reporter.而One,这是一个multiReporter,如果它工作正在调用teamCity,否则推迟.

  3. 使用FrontLoadedReporter(还没准备好).这就是ApprovalTests目前使用NCrunch的方式.它在UseReporter属性中加载的任何内容之前执行上述方法.我一直想添加一个程序集级别属性来配置它,但还没有(抱歉)我会尽快添加它.

希望这可以帮助.卢埃林