代码之家  ›  专栏  ›  技术社区  ›  Bronumski

使用console.out.writeline与nunit中的trace.writeline,可以单独运行,也可以在resharper或teamcity中运行

  •  12
  • Bronumski  · 技术社区  · 14 年前

    我隐约记得读过“something”“something”“something”关于在nunit中的console.out.writeline上使用trace.writeline,可能是在resharper或teamcity的上下文中,但我记不起细节。

    因此,问题是,无论是在单独运行的nunit环境中,还是在resharper/teamcity中,使用其中一个对另一个有什么好处,如果有的话有什么区别,您个人会使用什么?

    目前,我的立场是trace.writeline,这不仅是因为我模糊地记得我可能梦到的事情,而且我觉得在单元测试中跟踪更多的是诊断任务,而不是输出任务。

    3 回复  |  直到 14 年前
        1
  •  10
  •   adrianbanks    14 年前

    就个人而言,我并不热衷于在单元测试中嵌入跟踪(使用您提到的任何一种方法)。如果单元测试需要这样做,则很可能表明单元测试过于复杂。如果需要通过单元测试跟踪逻辑,则应在整个测试中使用断言以编程方式检查是否发生预期行为,从而消除对文本跟踪输出的需要。

    然而,你需要务实——有时候这样做很有用。使用任何一种方法(或类似于 debug.writeline的方法)都可以,但使用哪一种方法会给您带来一定的灵活性。

    如果您有很多输出跟踪的测试,那么当您在一次运行中运行所有测试时,您可以获得很多跟踪输出。在nunit中,您可以在选项页中过滤:

    这四个选项执行以下操作?P=选项Dialog&R=2.4.8“rel=“Noreferrer”>Ref :。

    • 标准输出 :捕获写入控制台的所有输出。错误。
    • 错误输出 :捕获写入控制台的所有输出。错误。
    • trace output :捕获所有写入跟踪或调试的输出。
    • logoutput :捕获写入log4net日志的输出。除非为测试程序集或项目的配置文件中的 defaultlogthreshold setting指定了其他级别,否则nunit将捕获错误级别或更高级别的所有输出。

    通过关闭这些选项,您可以单独禁用发送到四种不同日志记录方法的跟踪的输出,使您能够筛选测试跟踪。

    我不知道Resharper的测试运行程序中有任何类似的设置。

    还有一件事值得考虑,那就是文本输出可能有副作用。我最近遇到了nunit崩溃,因为某些输出包含在XML文件中非法的字符-nunit生成一个字符作为我们的自动生成的一部分。


    编辑

    @勃朗姆斯基:我能看到的唯一真正的区别是使用一种方法而不是另一种方法时输出的消耗方式。

    某些工具将选择 debug->code>tracing(例如debugview),但不选择 console->code>output。此外,还可以通过配置(在app.config中)禁用运行时的 trace output,但不能禁用 console output。但是,只有当您必须用跟踪测试来修饰真实(即,不是测试)代码时,这才有意义-在运行时记录 lots of text可能会很昂贵,因此如果它可以被关闭,这是有益的,除非您真的需要它来诊断某些东西。

    此外,当使用nunit时,如果您有太多的日志记录需要涉水通过,您可以有选择地单独关闭它们。

    无论你提到哪种方法)。如果单元测试需要这样做,则很可能表明单元测试过于复杂。如果您需要通过单元测试跟踪逻辑,那么应该在整个测试中使用断言以编程方式检查预期的行为是否发生,从而消除对文本跟踪输出的需求。

    然而,你需要务实——有时候这样做很有用。使用任何一种方法(或类似的方法) Debug.WriteLine )很好,但是你用哪一个会给你一些灵活性。

    如果您有很多输出跟踪的测试,那么当您在一次运行中运行所有测试时,您可以获得很多跟踪输出。在nunit中,您可以在选项页面中过滤:

    NUnit Text Options

    这四个选项执行以下操作 ref :

    • 标准输出 :捕获写入控制台的所有输出。错误。
    • 错误输出 :捕获写入控制台的所有输出。错误。
    • 跟踪输出 :捕获所有写入跟踪或调试的输出。
    • 日志输出 :捕获写入log4net日志的输出。除非为 DefaultLogThreshold 测试程序集或项目的配置文件中的设置。

    通过关闭这些选项,您可以单独禁用发送到四种不同日志记录方法的跟踪的输出,使您能够筛选测试跟踪。

    我不知道Resharper的测试运行程序中有任何类似的设置。

    还有一件事值得考虑,即文本输出可能会产生副作用。我最近遇到了nunit崩溃,因为一些输出包含在XML文件中非法的字符-nunit生成一个字符作为我们的自动生成的一部分。


    编辑 :

    @勃朗姆斯基:我能看到的唯一真正的区别是使用一种方法而不是另一种方法时输出的消耗方式。

    某些工具会起作用 Debug 跟踪(如debugview),但不是 Console 输出。此外,您还可以禁用 Trace 通过配置(在app.config中)在运行时输出,但不是 慰问 输出。但是,只有当您必须用对测试的跟踪来修饰真实的(即,不是测试)代码时,这才是重要的-日志记录 太多了 运行时的文本可能会很昂贵,因此如果可以关闭它,除非您真的需要它来诊断某些东西,那么它是有益的。

    此外,当使用nunit时,如果您有太多的日志需要涉水通过,您可以有选择地单独关闭它们。

        2
  •  1
  •   Ray Henry    14 年前

    单元测试不是生产代码。如果你想的话,没有理由不能控制自己。如果你想使用trace,那也可以,但是要设置的工作要多一些。我对TeamCity不熟悉,所以我不能帮你。

        3
  •  0
  •   Mr. Mr.    14 年前

    Debug类提供了一组方法和属性来帮助调试代码。如果使用debug类中的方法打印调试信息并使用断言检查逻辑,则可以使代码更加健壮,而不会影响发货产品的性能和代码大小。在Visual Studio 2005项目中,创建调试生成将启用调试。

    您可以使用跟踪类中的属性和方法来检测发布版本。检测允许您监视在实际设置中运行的应用程序的运行状况。跟踪可以帮助您隔离问题并修复它们,而不会干扰正在运行的系统。 在Visual Studio 2005项目中,默认情况下会为发布版本和调试版本启用跟踪,因此会为发布版本和调试版本中的所有跟踪方法生成代码。因此,您可以使用跟踪来检测发布版本。

    我在这里找到了这个摘录,如果它有帮助的话:

    http://www.interviewcorner.com/Answer/Answers.aspx?QuestionId=268&MajorCategoryId=1&MinorCategoryId=16

    编辑:找到一些更有趣的信息 提到使用多播的跟踪,这是否意味着任何实现它的东西都将捕获跟踪写入行?

    请阅读并给出反馈:

    http://www.drdobbs.com/184405769;jsessionid=SFAYCN2R2Y3L5QE1GHRSKH4ATMY32JVN