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

我注意到,您可以使用常见的可疑命令将输出写入控制台:

Console.WriteLine("Your text here");

但是你也可以从TestContext对象中完成,例如:

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

所获得的结果最终会出现在相同的位置(在不同的日志(log)中),也会出现在.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>

因此,我想知道在各种测试中启用适当的"日志(log)记录"的最佳/更可持续的行动方案是什么?

(也可能我做得完全错了,有一种很好的方法可以使用记录器或类似的工具来完成).

推荐答案

TestContext.WriteLine的实现(该方法是抽象的)将很可能调用Trace.WriteLine,然后让它们的所有TraceListeners写入、存储、输出、通过邮箱发送或将字符串排队.

我怀疑,控制台输出最终进入TRX是一种更方便的做法,以防测试 run 者本身灾难性地失败.

跟踪和诊断输出应始终通过System.Diagnostics.TraceSystem.Diagnostics.Debug类或使用它们的实现来编写.如果需要在控制台上输出这些参数,请注册ConsoleTraceListener.

这可能会使测试用例场景中更容易确定Console.WriteLine来自测试对象,而不是您的单元测试代码. 这是基于这样的假设,即测试者无论如何都不会把所有东西都放在一个袋子里.

Csharp相关问答推荐

C# Json重新初始化动态类型

ListaryImportProperty的默认DllImportSearchPathsProperty行为

使用特定格式的JsonConvert序列化对象

CS0103 dlibdotnet和www.example.com facerect不在上下文中

如何使用XmlSerializer反序列化字符串数组?

从.Net 6 DLL注册和检索COM对象(Typelib导出:类型库未注册.(异常来自HRESULT:0x80131165))

ASP.NET核心MVC SqlException:违反主键约束';PK_USER';.无法在对象';数据库中插入重复的密钥.用户';

当前代码Cosmos DB 3.37.1:PartitionKey key key mismatch exception

集合表达式没有目标类型

EF核心区分大小写的主键

记录类型';==运算符是否与实现IEquatable<;T&>;的类中的';equals&>方法执行等价比较?

C#动态设置ServerReport报表参数

用于获取字符串的最后12个字符的正则表达式(空格除外)

如何在特定环境中运行dotnet测试?

类/值和日期的泛型方法

使用DI实例化带有动态参数的服务?

为什么我的属性即使没有显式地设置任何[必需]属性,也会显示验证?

如何在特定时间间隔运行多个后台任务?

为什么我不能在固定语句中使用外部函数?

从列表中跳过和获取条目的优雅方式