在我的单元测试中,任何调用Debug.Write(line)
或Console.Write(Line)
只是在调试时跳过,并且输出从不打印。从我正在使用的类中调用这些函数可以很好地工作。如何写单元测试的输出?
我知道单元测试是为了自动化,但我仍然希望能够从单元测试中输出消息。
在我的单元测试中,任何调用Debug.Write(line)
或Console.Write(Line)
只是在调试时跳过,并且输出从不打印。从我正在使用的类中调用这些函数可以很好地工作。如何写单元测试的输出?
我知道单元测试是为了自动化,但我仍然希望能够从单元测试中输出消息。
尝试使用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...");
}
}
“神奇”在MSDN如所描述的
尝试使用:
Console.WriteLine()
到Debug.WriteLine
呼叫只会DEBUG被定义时期间进行。
其他建议使用:Trace.WriteLine
以及,但我没有尝试过。
还有一个选项(不知道是否VS2008有它),但你仍然可以使用Debug.WriteLine
当你在IDE Test With Debugger
选项运行测试
你确定你在调试运行单元测试? Debug.WriteLine不会在发布版本中被标注。
两个选项尝试是:
Trace.WriteLine(),这是建inot发布版本以及调试
取消定义DEBUG在构建设置的单元测试
它的谈话有点迟。
我也试图让调试或跟踪或控制台或TestContext工作在单元测试。
这些方法都不会在输出窗口中显示工作或显示输出。
Trace.WriteLine("test trace");
Debug.WriteLine("test debug");
TestContext.WriteLine("test context");
Console.WriteLine("test console");
VS2012和大
(从评论)在Visual Studio 2012,没有图标。相反,测试结果中存在一个名为输出的链接。如果你点击链接,你会看到所有的WriteLine
。
此前VS2012
然后我在我的测试结果发现窗口,运行测试后,旁边的收效甚微绿色圆圈,还有另外一个图标,我一倍点击它。这是我的测试结果,它包括了上面所有类型的书写线。
当我的测试/测试设置/默认处理器架构设置和我的测试项目引用的程序集不相同时,我得不到输出。否则Trace.Writeline()工作正常。
我使用的xUnit所以这是我使用:Debugger.Log(0, "1", input);
PS:你可以用Debugger.Break();
来,所以你可以看到你登录out
Trace.WriteLine
应该工作只要你选择正确的输出(在“输出”窗口中显示标记为“显示输出来源”的下拉列表)
我认为它仍然是实际的。
您可以使用此NuGet包: https://www.nuget.org/packages/Bitoxygen.Testing.Pane/
调用自定义WriteLine方法从这个库。
它在输出窗口内创建测试窗格,并始终将消息放在那里(在每次测试运行期间独立于DEBUG和TRACE标志)。
为了使跟踪更加容易,我可以推荐创建基类:
[TestClass]
public abstract class BaseTest
{
#region Properties
public TestContext TestContext { get; set; }
public string Class
{
get { return this.TestContext.FullyQualifiedTestClassName; }
}
public string Method
{
get { return this.TestContext.TestName; }
}
#endregion
#region Methods
protected virtual void Trace(string message)
{
System.Diagnostics.Trace.WriteLine(message);
Output.Testing.Trace.WriteLine(message);
}
#endregion
}
[TestClass]
public class SomeTest : BaseTest
{
[TestMethod]
public void SomeTest1()
{
this.Trace(string.Format("Yeah: {0} and {1}", this.Class, this.Method));
}
}
这取决于你的测试运行...例如,我使用的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); } }
有没有在我提供写你的输出窗口中的链接中列出的其他方法,但我更喜欢以前的。
解决了下面的例子:
public void CheckConsoleOutput()
{
Console.WriteLine("Hi Hi World");
Trace.WriteLine("Trace Trace the World");
Debug.WriteLine("Debug Debug WOrld");
Assert.IsTrue(true);
}
运行这个测试,根据“合格测试”之后,还有就是查看输出,这将显示在输出窗口的选项。
我发现(使用VS2013),如果测试在调试模式下运行,这只会打印一些东西。 – fusi 2015-09-24 11:15:20
根据[本文档](https://msdn.microsoft.com/en-us/library/dd465178(v = vs.140)),似乎使用TestContext需要VS2015 Enterprise(或早期版本的高级版本)。 aspx) – 2015-11-24 21:48:51
我注意到,如果你的字符串中有大括号,方法就会崩溃。所以“_testContext.WriteLine(”hello“);”工作,但“_testContext.WriteLine(”他{ll} o“);” “System.FormatException:输入字符串格式不正确”失败。 – 2017-07-20 21:08:35