如何从单元测试中写出输出?

Chr*_*ris 98 c# debugging unit-testing mstest visual-studio

我的单元中的任何调用都会测试,Debug.Write(line)或者Console.Write(Line)只是在调试时跳过,并且从不打印输出.从我正在使用的类中调用这些函数.

我知道单元测试是自动化的,但我仍然希望能够从单元测试中输出消息.

Yog*_*ise 141

谈话有点晚了.

我还试图让Debug或Trace或Console或TestContext在单元测试中工作.

这些方法都不会在输出窗口中显示工作或显示输出.

    Trace.WriteLine("test trace");
    Debug.WriteLine("test debug");
    TestContext.WriteLine("test context");
    Console.WriteLine("test console");
Run Code Online (Sandbox Code Playgroud)

VS2012和Greater
(来自评论)在Visual Studio 2012中,没有图标.相反,测试结果中有一个名为Output的链接.如果单击该链接,则会看到所有内容WriteLine.

在VS2012之前
我注意到在我的测试结果窗口中,在运行测试后,在小成功的绿色圆圈旁边,有另一个图标,我加倍点击它.这是我的测试结果,它包括了上面所有类型的writelines.

  • 在Visual Studio 2012中,没有图标.相反,测试结果中有一个名为"输出"的链接.如果单击该链接,则会看到所有的writelines. (42认同)
  • geez,"输出"链接本质上很难找到.如果有人在努力寻找它,那就在Text Explorer的底部.选择测试后,它会显示"经过时间:xxx"的结果.下面是"输出"链接. (15认同)
  • VS2022中不再有输出链接 (7认同)
  • 在Visual Studio 2017中,它仍然是"输出"链接. (4认同)

fre*_*nky 108

尝试使用TestContext.WriteLine()测试结果中的输出文本.

例:

    [TestClass]
    public class UnitTest1
    {
        private TestContext testContextInstance;

        /// <summary>
        ///  Gets or sets the test context which provides
        ///  information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext
        {
            get { return testContextInstance; }
            set { testContextInstance = value; }
        }

        [TestMethod]
        public void TestMethod1()
        {
            TestContext.WriteLine("Message...");
        }
    }
Run Code Online (Sandbox Code Playgroud)

"魔术"在MSDN中描述为"测试框架自动设置属性,然后您可以在单元测试中使用它."

  • 我发现(使用VS2013)如果测试在调试模式下运行,这只会打印一些内容. (5认同)
  • 根据[本文档](https://msdn.microsoft.com/en-us/library/dd465178(v = vs.140).aspx,使用TestContext似乎需要VS2015 Enterprise(或早期版本的高级版本). ) (3认同)
  • 这很有趣......虽然我仍然不知道为什么他们没有将这个和类似的功能添加到我们可以从框架中使用以避免混淆的基类或接口中。 (2认同)

小智 57

在Visual Studio 2017中,您可以看到测试资源管理器的输出.

1)在你的测试方法中,Console.WriteLine("something");

2)运行测试.

3)在"测试资源管理器"窗口中,单击"通过的测试方法".

4)然后单击"输出"链接.

在此输入图像描述

然后单击"输出",您可以看到Console.Writeline()的结果. 在此输入图像描述

  • 我使用2017版本15.5.6位O没有看到输出链接. (10认同)
  • 对于那些没有看到“输出”链接的人。1) 您应该选择一种测试**方法**。2)让测试资源管理器窗口垂直填充VS窗口,否则链接将被隐藏,并且滚动条太小而无法被注意到或使用。 (2认同)

jon*_*zim 15

这取决于你的测试运行器...例如,我正在使用XUnit,所以如果你正在使用它,请按照以下说明操作:

https://xunit.github.io/docs/capturing-output.html

此方法将输出与每个特定的单元测试分组.

using Xunit;
using Xunit.Abstractions;

public class MyTestClass
{
    private readonly ITestOutputHelper output;

    public MyTestClass(ITestOutputHelper output)
    {
        this.output = output;
    }

    [Fact]
    public void MyTest()
    {
        var temp = "my class!";
        output.WriteLine("This is output from {0}", temp);
    }
}
Run Code Online (Sandbox Code Playgroud)

我提供的链接中列出了另一种方法,用于写入"输出"窗口,但我更喜欢上一个.


Leg*_*nds 7

VS 2019 中

  1. 在主 VS 菜单栏中单击:View->Test Explorer
  2. 在测试资源管理器中右键单击您的测试方法 -> 调试
  3. 单击additional output以下屏幕截图中的链接。

在此处输入图片说明

您可以使用:

  • 调试.WriteLine
  • 控制台写行
  • 测试上下文.WriteLine

all 将记录到额外的输出窗口。