MSTest - 直接将消息写入 StdOut 和使用 TestContext 有什么区别?

问题描述 投票:0回答:1

我正在尝试找出一种在运行 MSTest 测试项目时将消息记录到控制台/测试资源管理器/管道执行日志的好方法。

我注意到您可以使用通常的方式将输出写入控制台:

Console.WriteLine("Your text here");

但是您也可以从 TestContext 对象执行此操作,例如:

TestContext _testContext;
_testContext.WriteLine("TEST CONTEXT : This is a test message");

所获得的结果最终出现在同一位置(在各种日志中),并且也在

.trx
文件中的“StdOut”消息下:

<UnitTestResult >
    <Output>
        <StdOut>                
            TestInitialize&#xD;
            Test Name : AssertIsTrue&#xD;
            TestCleanup&#xD;
            
            TestContext Messages:&#xD;
            TEST CONTEXT : This is a test message
        </StdOut>
    </Output>
</UnitTestResult>

所以我想知道在各种测试中实现正确“记录”的最佳/更可持续的行动方案是什么?

(或者也许我做的完全错误,并且有一个很好的方法可以使用记录器或类似的东西来做到这一点)。

c# unit-testing testing automated-tests mstest
1个回答
0
投票

TestContext.WriteLine
(该方法是抽象的)的实现很可能会调用
Trace.WriteLine
,让所有的
TraceListeners
写入、存储、输出、通过电子邮件发送或对字符串进行排队。

我怀疑控制台输出最终出现在 trx 中更方便,以防测试运行器本身发生灾难性失败。

跟踪和诊断输出应始终通过

System.Diagnostics.Trace
System.Diagnostics.Debug
类或使用相同类的实现来编写。如果需要在控制台上输出这些内容,请注册
ConsoleTraceListener

这可能会使在测试用例场景中更容易确定

Console.WriteLine
来自被测主题,而不是您的单元测试代码。 这是假设测试运行者无论如何都不会把所有东西都堆放在一个袋子里。

© www.soinside.com 2019 - 2024. All rights reserved.