如何在.net核心测试项目中打印信息?

时间:2018-11-20 22:39:20

标签: logging .net-core mstest

在测试项目中打印消息的标准方式是什么?

我有一个用MSTest编写的集成测试项目,每个测试用例都包含登录步骤和实际调用等。我需要在控制台上打印一些消息以跟踪信息,例如其登录角色以及所调用的网址。

理想情况下,我希望消息仅在调试模式下显示。

当前,我正在将Console.WriteLine#if DEBUG指令一起使用。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您无需在单元测试中记录任何内容。前提是测试中的代码可以说明一切,而阅读它们的任何人都可以理解正在发生的事情。如果您认为需要在测试中添加日志记录,则表明您的代码过于复杂,需要进行重构。

了解SOLID principles背后的原理并重构代码以遵循这些“规则”是个好主意。我建议您尝试遵循的第一个原则是Single Responsibility Principle。这应该可以帮助您重构代码以使其更具可测试性,并且无需在测试中添加日志。 (注意:互联网上还有其他示例-上面的链接只是我通过快速搜索找到的示例)。

编辑

您可以创建自己的logger类来包装您的Console.WriteLine(...)呼叫,例如

public static class TestLogger
{
    public static void Log(string output)
    {
#if DEBUG
        Console.WriteLine(output);
#endif
    }
}

并在测试代码中使用您的课程

public class MyTests
{
    public void FirstTest()
    {
        TestLogger.Log("Just started");
    }
}

记录器仅以调试模式写入控制台这一事实对于测试代码是隐藏的,希望可以使它更加清晰。将来,如果您想使用Log4Net或其他日志记录库,则可以更新TestLogger类,希望您的测试用例都不需要更改:-)