如何从[TestMethod]中使用Console.WriteLine输出?

22

我想展示一些来自[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.
            }
        }
    }
}

是的,你说得对。抱歉我重复了问题,但我必须添加一条注释:您必须在调试模式下执行测试,否则您将看不到任何输出。 - ferpega
3个回答

30

3
嗨@Davide Piras,我已将Console.WriteLine更改为System.Diagnostics.Debug.WriteLine,但我仍然无法在输出窗口中看到任何内容。 - ferpega
1
好的,我已经看到我必须在调试模式下执行测试,否则我什么也看不到。 - ferpega
只有在使用Debug.WriteLine时,您才必须以调试模式执行测试 - 如果使用Trace.WriteLine,则可以使用任何构建版本,包括发布。 - rudolf_franek
1
感谢@rudolf_franek,但是我无法使用Trace.WriteLine显示任何内容。 它只在调试模式下显示文本(例如Debug.WriteLine)。 我肯定做错了什么。 - ferpega
@Davide Piras是正确的 - 使用Trace.Listeners.Add添加现有的侦听器类型,或者如果您需要真正特殊的内容,则创建自己的类型。最简单的标准方法是:Trace.Listeners.Add(new System.Diagnostics.DefaultTraceListener()); - rudolf_franek
看起来很简单,但是对我来说无法运行。我的输出窗口中什么也看不到。在我的输出窗口中,我只能选择“构建”而没有其他选项。 - ferpega

20

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


3
很高兴知道它应该来自哪里。 - Akku
7
@Akku,只需在你的类中添加 public TestContext TestContext { get; set; } 。测试运行程序将为您填充它。您还可以在 ClassInitializeAssemblyInitialize 方法中接收它作为参数。 - Sam
正是我所需要的!将输出文本直接显示在测试结果窗口中-完美! - Shawson
1
这就是我想要的。它会显示在测试资源管理器输出窗口中(VS测试资源管理器底部的输出链接)。 - Patrik Lindström
1
@Sam 拥有TextContext属性的getter/setter确实是一个答案。很遗憾它被埋在了注释中。 - BozoJoe

5
您可以通过在运行MSTest命令行时使用选项/detail:stdout来强制显示Console.WriteLine()。例如:
MSTEST /testcontainer:MyDllToTest.dll /testSettings.local.TestSettings /detail:stdout

请注意,我使用/testSettings来防止在testResults目录中复制(部署)DLL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接