C# Visual Studio Express 2013:单元测试中的程序输出(控制台、调试等)

C# Visual Studio Express 2013:单元测试中的程序输出(控制台、调试等),c#,unit-testing,visual-studio-2013,output,visual-studio-express,C#,Unit Testing,Visual Studio 2013,Output,Visual Studio Express,我的头真的撞到墙上了。在Visual Studio(Express 2013)中获取程序输出是否如此困难?在编写代码时,我发现在工作和故障排除时能够打印出变量、操作等的值是绝对必要的 在Java和Eclipse中,System.out.println()始终工作,打印到IDE控制台。在编写C程序时,我总是使用控制台,所以回显任何东西都没有问题。然而,在VS Express 2013中,我似乎无法获得任何输出 问题是否与我编写的是单元测试,而不是“正常”的可执行程序有关?如果是这样,有没有办法让V

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

在Java和Eclipse中,System.out.println()始终工作,打印到IDE控制台。在编写C程序时,我总是使用控制台,所以回显任何东西都没有问题。然而,在VS Express 2013中,我似乎无法获得任何输出

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

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

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

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

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

编辑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...");
        }
    }
}
如果您将输出窗口配置为显示调试数据,它将显示在那里


来源:(它适用于VS 2010,但也应适用于2013,因为这是一个框架选项,而不是IDE选项)。

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

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

显示的消息全部由控制台写入。WriteLine


我正在使用Visual Studio 2013 Professional。我不确定速成版的效果是否不同。

我真的不喜欢回答我自己的问题,因为这似乎有点“不诚实”。然而,它已经安静了一段时间,我认为没有其他答案

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

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

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


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

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

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

不运行或调试单元测试项目。在
testexplorer
窗口中选择一个或多个测试,即可启动测试会话。或者在单元测试方法上,右键单击并选择
runtests
Debug Tests


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

您应该利用日志框架来完成这类工作。从日志框架中,您可以选择登录到控制台、平面文件或许多其他数据接收器,也可以告诉框架忽略输入。好的日志框架是非常可配置的


在.NET领域,社区最喜欢的似乎是NLog。“Getting Started”(入门)链接将帮助您开始。

一些代码会有所帮助。但是如何配置输出窗口?在我的输出窗口中,我选择了“显示输出自:调试”。但似乎,由于这是一个单元测试,我无法在正常调试模式下运行它。据我所知,debug.writeline也应该在版本配置中的项目上工作。我现在就要测试它。
System.Diagnostics.Debug.WriteLine(…)
将在定义“Debug”符号后工作。您可以使用
System.Diagnostics.Trace.WriteLine(…)
。我无法在调试或发布模式下直接执行。我运行类的方式是从测试资源管理器。我也尝试过Trace.Writeline(),但当我遇到这些问题时,它们都不会提供任何输出
System.Diagnostics.Debug.WriteLine("Yay!");