我正在使用 Approval Tests .在我的开发机器上,我对 DiffReporter
很满意,它在我的测试结果与批准的结果不同时启动 TortoiseDiff:
[UseReporter(typeof (DiffReporter))]
public class MyApprovalTests
{ ... }
但是,当在 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
显然它找不到 tortoisemerge.exe,这很好,因为它没有安装在构建代理上。但是如果它被安装了呢?然后对于每次失败,另一个 tortoisemerge.exe 实例将启动并且没有人会关闭它。最终大量的 tortoisemerge.exe 实例会杀死我们的服务器 :)
所以问题是——应该如何修饰测试以在本地机器上运行 Tortoise Diff
并仅在构建服务器上报告错误?我知道 #IF DEBUG [UseReporter(typeof (DiffReporter))]
但如果可能,我更喜欢其他解决方案。
最佳答案
Reporters 和 CI 的问题有几个解决方案。我将列出所有这些,然后指出一个更好的解决方案,该解决方案尚未完全启用。
使用 AppConfigReporter。这允许您在 AppConfig 中设置 reporter,并且您可以使用 QuietReporter for CI。 这里有一个视频,还有很多其他的记者。 AppConfigReporter 出现在 6:00。 这具有单独配置的优点,您可以在程序集级别进行装饰,但缺点是如果您在类/方法级别进行覆盖,您仍然会遇到问题。
创建您自己的 (2) 名记者。值得注意的是,如果你使用记者,它会被调用,不管它是否在环境中工作。 IEnvironmentAwareReporter 允许复合记者,但不会阻止直接调用记者。 您很可能需要 2 个记者,其中一个什么都不做(就像一个安静的记者),但只在您的 CI 服务器上工作,或者在被 TeamCity 调用时工作。将其称为 TeamCity Reporter。还有一个,它是一个 multiReporter,它在工作时调用 teamCity,否则遵从 。
使用 FrontLoadedReporter(还没准备好)。这就是 ApprovalTests 目前使用 NCrunch 的方式。它在 UseReporter 属性中加载的任何内容之前执行上述方法。我一直想添加一个程序集级别的属性来配置它,但还没有(抱歉)我会尽快添加它。
希望这对您有所帮助。 卢埃林
关于c# - 如何在 Teamcity 上使用 ApprovalTests?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9939209/