我在运行测试时需要看一些代码,并且 TestContext必须是我需要的Test类的一部分 显示正在测试的类的debug.writelines。我考虑过 只需将TestContext传递给我的MessageStatus静态方法即可 必须但是那将是一个PITA因为UnitTest类会有 将TestContext传递给它正在测试的对象。太紧了 我很喜欢。
基本用语
[TestMethod]
public void TestA()
{
//....
Assert.IsTrue(Blah.Blah()));
}
public void Blah()
{
Debug.WriteLine("Hello");
}
当我运行单元测试时,永远不会出现!
我可以将其更改为:
TestContext t;
[TestMethod]
public void TestA()
{
//....
Assert.IsTrue(Blah.Blah(t)));
}
public void Blah(TestContext p1)
{
p1.WriteLine("Hello");
}
但这是疯了,这意味着改变我所有的签名和紧密耦合。我在How to write output from a unit test?阅读了帖子,但这没有帮助:(
答案 0 :(得分:2)
如果您需要查看Debug.WriteLine生成的行或处理Debug.Assert生成的断言,您可以创建自己的System.Diagnostic.TraceListener以将输出重定向到TestContext - 请参阅我的回答What do I have to do so that assertions won't block automated tests anymore?。
public class MyListenerThatDoesNotShowDialogOnFail:
System.Diagnostics.TraceListener
{
// This is to avoid message box on Debug.Assert(false);
public override void Fail(string message, string detailMessage)
{// do something UnitTest friendly here like Assert.Fail(false)
}
// This (+Write) is to redirect Debug.WriteLine("Some trace text");
public override void WriteLine(string message)
{// do something UnitTest friendly here like TestContext.Write(message)
}
}
测试设置监听器中的某个位置。请注意,下面的示例已经过简化,您可能希望保存当前的侦听器并在测试结束时进行恢复。
Debug.Listeners.Clear();
Debug.Listeners.Add(new MyListenerThatDoesNotShowDialogOnFail());
答案 1 :(得分:1)
您需要使用Console.WriteLine
输出显示在测试运行器中。但是,这是一个坏事。我建议使用像nlog这样的日志框架。