【问题标题】:Visual Studio Express 2013: Program output in unit tests (console, debug etc.)Visual Studio Express 2013:单元测试中的程序输出(控制台、调试等)
【发布时间】:2014-11-05 03:32:51
【问题描述】:

我真的把我的头撞到墙上了。在 Visual Studio (Express 2013) 中获得程序输出有那么难吗?在编写代码时,我发现在工作和故障排除时能够打印出变量、操作等的值是绝对必要的。

在 Java 和 Eclipse 中,System.out.println() 始终有效,打印到 IDE 控制台。在编写 C 程序时,我总是使用控制台,因此回显任何内容都没有问题。但是,在 VS Express 2013 中,我似乎无法获得任何输出。

问题是否与我正在编写单元测试而不是“正常”可执行程序这一事实有关?如果是这样,有没有办法让 VS 在单元测试类中显示程序输出?我试过使用调试,但这也没有显示任何东西。考虑到存在配置问题,我一直在寻找调试消息未显示的解决方案,但我找到的选项(在此处或其他地方)似乎都没有帮助。

当然,如果在用 VS/C# 编写代码时还有另一种常用的方法来检查程序值、输出等,我想听听 :-)

有人有什么想法吗?如果问题太不清楚或其他什么,请告诉我,我会解决它。

注意:我正在使用单元测试类进行功能测试,以防有人想指出我应该和不应该对单元测试做什么。

编辑 1:我忘了提到我无法使用“开始:调试”运行代码。如果我尝试,我会收到此错误:“无法直接启动具有类库输出类型的项目。” (单元测试项目使用另一个项目中的类,这是一个类库项目。)这当然是因为我在解决方案中没有可执行项目。我运行它的方式是从测试资源管理器中运行选定的测试。

编辑 2:代码:

using System;
using System.Diagnostics;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WordpressAutomation;

namespace WordpressTests
{

    [TestClass]
    public class LoginTests : WordpressTest {

        [TestMethod]
        public void AdminUserCanLogIn() {

            System.Diagnostics.Debug.WriteLine("Something...");
            System.Diagnostics.Trace.WriteLine("Something...");
        }
    }
}

【问题讨论】:

  • 一些代码会有所帮助。

标签: c# unit-testing visual-studio-2013 output visual-studio-express


【解决方案1】:

Visual Studio 的 TestExplorer 有一个单独的输出窗口。它不会写入Visual Studio的默认输出(我不知道它是否可配置)

您必须选择要在 TestExplorer 中查看输出的测试。如果测试有一些输出,你应该看到一个超链接“输出”。单击该按钮将打开一个显示测试输出的新选项卡。

显示的消息都是Console.WriteLine写的。

我正在使用 Visual Studio 2013 Professional。我不确定 Express 版本的工作方式是否不同。

【讨论】:

  • 嗯。是的。我知道了。这可能是我能从单元测试中得到的最接近的输出?我认为可能创建一个与测试项目并行的控制台项目是可行的方法。
  • 做了这么久,我得出的结论是,这是一个非常实用的解决方案。
  • 嗯,这似乎不适用于 vs2015 企业版
  • 大型测试输出崩溃 VS 2013
  • 这适用于 vs2015 但如果您使用的是运行设置文件,请确保 MSTest 设置中的 CaptureTraceOutput 设置为 true。
【解决方案2】:
System.Diagnostics.Debug.WriteLine("Yay!");

如果您将输出窗口配置为显示调试数据,它会显示在那里。

来源:Visual Studio 2010 Express. Write to the output window(适用于 VS 2010,但也应适用于 2013,因为这是一个框架选项,而不是 IDE 选项)。

【讨论】:

  • 但是如何配置输出窗口呢?在我的输出窗口中,我选择了“显示来自:调试的输出”。但似乎,由于这是一个单元测试,我无法在正常调试模式下运行它。
  • 据我所知,debug.writeline 也应该适用于发布配置中的项目。我现在要测试一下。
  • 当定义了“DEBUG”符号时,System.Diagnostics.Debug.WriteLine(...) 将起作用。你可以使用System.Diagnostics.Trace.WriteLine(...)
  • 我无法直接执行,在调试或发布模式下。我运行课程的方式来自测试资源管理器。我也尝试过 Trace.Writeline() ,但是当我运行单元测试时,这些都没有给出任何输出。这就是为什么我在想也许问题/挑战在于该项目是一个单元测试项目......
【解决方案3】:

我不太喜欢回答我自己的问题,因为这似乎有点“不诚实”。不过,静了一阵子,我想也没有其他答案了。

最实用的解决方案是创建另一个项目,例如控制台项目,您可以在其中创建所有输出。它可能不直接与单元测试通信,但由于我在这个特定示例中开发的测试框架包含与类库对话的功能测试,因此可以在解决方案中使用单独的项目。

因此,总而言之,解决方案包括: - 一个单元测试项目,带有实际测试 - 具有框架逻辑的类库项目 - 一个控制台项目,用于测试类库中的类,或单元测试项目中的非单元测试类。

【讨论】:

  • 不要担心回答你自己的问题。 Stack Overflow 鼓励你回答自己的问题,如果你想出一个足够的问题。您不只是为自己提出问题,还为可能有相同问题的未来访问者提出问题。
  • 是的,有时,我问了一个问题并立即回答(通过“分享您的知识,问答样式复选框),只是因为我确信我会再次遇到问题,我想通过谷歌搜索找到它。
【解决方案4】:

我认为对于这种情况,您应该使用 log,而不是控制台输出。您可以将日志配置为输出到文件,甚至输出到您指定的窗口。我相信你可以在没有控制台的情况下使用日志,并且你可以配置你的日志在生产中只出现警告或错误,并且可以在你的调试会话期间显示调试信息。

我用log4j,这里可以用任何好的日志软件。

【讨论】:

    【解决方案5】:

    您应该利用日志框架来做这种事情。从日志框架中,您可以选择将日志记录到控制台、平面文件或许多其他数据接收器,或者您可以告诉框架忽略输入。好的日志框架是非常可配置的。

    在 .NET 领域,社区最喜欢的似乎是 NLog,http://nlog-project.org/。 “入门”链接将助您一臂之力。

    【讨论】:

    • 我很久以前就找到了一个更简单的解决方案:只需使用 Console.Write,然后检查测试输出。
    • 当然,您可以使用 Console.WriteLine。它简单快捷。将来,如果您想要将要发布的类的输出,并且如果您不希望在有人编写您的程序时将输出显示到控制台,那么您将需要一种不同的方式。由于此输出在测试时很有用,因此当代码在另一个环境中时,您可能会发现它很有用。使用 Console.WriteLine,您的选择非常有限。通过使用日志框架,您可以限制此输出的可见性,并且您可以以您选择的格式查看此输出
    【解决方案6】:

    我不确定VS2013,但是在VS2008中,如果双击测试结果摘要(完成后,通过或失败),它会打开一个窗口,显示“Common Results”,“Error Message ”等,最后是“标准控制台输出”。它基本上可以很好地为每个测试单独捕获控制台输出。唯一的缺点是它不能实时显示输出。它只会在完成时显示。

    【讨论】:

      【解决方案7】:

      无法启动输出类型为类库的项目 直接

      不运行或调试单元测试项目。通过在Test Explorer 窗口中选择1 个或多个测试来启动测试会话。或者通过右键单击并选择Run TestsDebug Tests 在单元测试方法上。

      根据需要使用Console.WriteLineDebug.WriteLine 输出信息性消息,并在单元测试结果的Output 链接中查找它们。

      【讨论】:

      • 不知道你为什么要回答一个两年前我自己回答过的两年前的问题。
      • @FrankH 我之所以回答是因为我在研究问题时登陆此页面并直接回答了一个事实,即没有点击F5 来调试单元测试。你的回答没有提到这个事实。其他正在学习的人可能不了解 Visual Studio 中的操作。
      猜你喜欢
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多