Answers:
尝试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中,“魔术”被描述为“测试框架自动设置属性,然后您可以在单元测试中使用该属性”。
我还试图使Debug或Trace或Console或TestContext可以在单元测试中工作。
这些方法在输出窗口中似乎都不起作用或不会显示输出:
Trace.WriteLine("test trace");
Debug.WriteLine("test debug");
TestContext.WriteLine("test context");
Console.WriteLine("test console");
(来自注释)在Visual Studio 2012中,没有图标。而是在测试结果中有一个称为Output的链接。如果单击链接,则会看到所有WriteLine
。
然后,在运行测试后,我在“ 测试结果”窗口中注意到,成功的小绿色圆圈旁边是另一个图标。我双击了它。这是我的测试结果,其中包括上面所有类型的写入行。
在Visual Studio 2017中,您可以查看测试资源管理器的输出。
1)在您的测试方法中,Console.WriteLine(“ something”);
2)运行测试。
3)在“测试资源管理器”窗口中,单击“通过的测试方法”。
4)然后单击“输出”链接。
Console.WriteLine
不是在“测试”输出窗格可见无论是。
这取决于您的测试运行程序...例如,我正在使用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);
}
}
我提供的用于写入“输出”窗口的链接中列出了另一种方法,但我更喜欢前一种方法。
我认为这仍然是实际的。
您可以使用以下NuGet包: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));
}
}
Could not load file or assembly 'Microsoft.VisualStudio.Shell.12.0,
它确实取决于@jonzim提到的测试运行程序。对于NUnit 3,我不得不用来NUnit.Framework.TestContext.Progress.WriteLine()
在Visual Studio 2017的`` 输出''窗口中获取运行输出。
NUnit描述了如何:在这里
据我了解,这围绕着测试执行者已经获得的测试执行的并行化。
out
”?
原因/解决方案的其他变体:
我的问题是我没有得到输出,因为我在异步上下文中的循环中将异步LINQ调用的结果集写入控制台:
var p = _context.Payment.Where(pp => pp.applicationNumber.Trim() == "12345");
p.ForEachAsync(payment => Console.WriteLine(payment.Amount));
因此,在运行时清除控制台对象之前(仅运行一个测试时),测试未写入控制台。
解决方案是首先将结果集转换为列表,因此我可以使用forEach()的非异步版本:
var p = _context.Payment.Where(pp => pp.applicationNumber.Trim() == "12345").ToList();
p.ForEachAsync(payment =>Console.WriteLine(payment.Amount));