Bro*_*ski 12 .net resharper teamcity trace nunit
我依稀记得在nUnit中使用Trace.WriteLine在"reSharper"或"TeamCity"的上下文中使用Trace.WriteLine读取"某些内容"的"某处",但我不记得详细信息.
因此,问题是在nUnit单独运行的环境中,或者在reSharper/TeamCity中是否有使用一个优于另一个的任何好处,有什么区别(如果有的话)和你个人会使用什么?
目前我的立场是Trace.WriteLine,不仅因为我依旧记得我梦寐以求的东西,而且我觉得在单元测试中跟踪更多的是诊断任务而不是输出任务.
adr*_*nks 10
就个人而言,我并不热衷于在单元测试中嵌入跟踪(使用你提到的任何一种方法).如果单元测试需要这样,则很可能表明您的单元测试过于复杂.如果需要通过单元测试跟踪逻辑,则应在整个测试过程中使用断言以编程方式检查预期的行为是否正在发生,从而无需文本跟踪输出.
但是,你需要务实 - 有时这样做很有用.使用任何一种方法(或其他类似方法Debug.WriteLine)都可以,但是你使用哪种方法确实给你一些灵活性.
如果您有许多输出跟踪的测试,那么当您在一次运行中运行所有测试时,可以获得大量的跟踪输出.在NUnit中,您可以在选项页面中对其进行过滤:

这四个选项执行以下参考:
DefaultLogThreshold为测试程序集或项目的配置文件中的设置指定了另一个级别,否则NUnit将捕获错误级别或更高级别的所有输出.通过关闭这些选项,您可以单独禁用发送到四种不同日志记录方法的跟踪输出,使您可以过滤测试跟踪.
我不知道ReSharper的测试运行器中有任何类似的设置.
值得考虑的一件事是文本输出可能有副作用.我最近遇到NUnit崩溃,因为某些输出包含在XML文件中非法的字符--NUnit会在我们的autobuild中生成一个.
编辑:
@Bronumski:我可以看到使用一种方法而不是另一种方法的唯一真正区别是输出的消耗方式.
某些工具会选择Debug跟踪(例如DebugView)但不Console输出.此外,您可以Trace通过配置(在app.config中)在运行时禁用输出,但不能Console输出.这只会是重要的,如果你必须用跟踪测试真实的(即非测试)代码 - 在运行时记录大量文本可能是昂贵的,如果可以关闭除非你真的需要它来诊断它是有益的一些东西.
此外,在使用NUnit时,如果您需要过多的日志记录,则可以选择性地将它们彼此独立地关闭.