如何从[TestMethod]中控制Console.WriteLine?

fer*_*ega 18 c# testing visual-studio-2010

我试图从[TestMethod]方法显示一些信息.

通常我们使用NUnit和一行Console.WriteLine运行良好,我们可以在"输出"窗口中看到它,但在这个项目中我们必须使用嵌入VS2010的测试工具并且Console.WriteLine不运行因为我们看不到任何东西.

我想要的是以这种方式或多或少地在"输出"窗口上显示跟踪消息:

using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;


namespace Test1
{
    [TestClass]
    public class TestNum1
    {
        [TestMethod]
        public void Constructors()
        {
            for (int b = 1; b < 99; b++) {
                Console.WriteLine(b.ToString());  // <<<<<<< This don't show on Output.
                Assert.AreEqual(b, b);  // This is only a silly sample.
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ras 27

此时应更换Console.WriteLineSystem.Diagnostics.Debug.WriteLine(...)

您将在Visual Studio调试输出窗口中看到输出.

编辑:刚刚发现这是一个重复的问题,请看这里:

如何在执行MSTest测试期间写入Console.Out

  • 嗨@Davide Piras,我用`System.Diagnostics.Debug.WriteLine`更改了`Console.WriteLine`但我仍然无法在输出窗口中看到任何内容. (2认同)

小智 18

你可以使用 testContextInstance.WriteLine(string s);

  • @Akku,只需添加`public TestContext TestContext {get; 组; 对你的班级.测试运行器为您填充它.您还可以将它作为`ClassInitialize`和`AssemblyInitialize`方法的参数接收. (6认同)
  • 很高兴知道它应该来自哪里。 (2认同)

小智 5

您可以Console.WriteLine()通过运行MSTest命令行强制显示选项/detail:stdout.

例如:

MSTEST /testcontainer:MyDllToTest.dll /testSettings.local.TestSettings /detail:stdout
Run Code Online (Sandbox Code Playgroud)

(注意我/testSettings用来防止在testResults目录中进行DLL复制(部署)