Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 名为suppress Debug.WriteLine和Trace.WriteLine的单元测试代码_C#_Unit Testing_Visual Studio Debugging - Fatal编程技术网

C# 名为suppress Debug.WriteLine和Trace.WriteLine的单元测试代码

C# 名为suppress Debug.WriteLine和Trace.WriteLine的单元测试代码,c#,unit-testing,visual-studio-debugging,C#,Unit Testing,Visual Studio Debugging,在运行测试时,我需要查看一些代码 TestContext必须是我的测试类的一部分,我需要 显示正在测试的类的debug.writeline。我考虑 只需将TestContext传递给MessageStatus静态方法,就可以了 必须这样做,但这将是一个PITA,因为UnitTest类将 将TestContext传递给它正在测试的对象。太紧 适合我的口味 基本上 [TestMethod] public void TestA() { //....

在运行测试时,我需要查看一些代码 TestContext必须是我的测试类的一部分,我需要 显示正在测试的类的debug.writeline。我考虑 只需将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");
}

但这太疯狂了,它意味着改变我所有的签名和紧密耦合。我读了这篇文章,但没有帮助:(

您需要使用
控制台.WriteLine
以使输出显示在测试运行程序中。然而,这是一件坏事。我建议使用类似nlog的日志框架。

如果您需要查看Debug.WriteLine生成的行或处理Debug.Assert生成的断言,您可以创建自己的系统。Diagnostic.TraceListener将输出重定向到TestContext-请参阅我的答案

请注意,下面的示例已简化,您可能希望保存当前侦听器并在测试结束时还原

Debug.Listeners.Clear();
Debug.Listeners.Add(new MyListenerThatDoesNotShowDialogOnFail());

请参阅TraceListener的示例,该示例在
Debug.Listeners.Clear();
Debug.Listeners.Add(new MyListenerThatDoesNotShowDialogOnFail());