这是重现问题的方法:
空单元测试项目包含UnitTest1类,如下所示:
using System;using System.Diagnostics;using Microsoft.VisualStudio.TestTools.UnitTesting;[TestClass]public class UnitTest1{ private Readonly TraceSource trace = new TraceSource("Demo",SourceLevels.All); [TestMethod] public voID TestMethod1() { this.trace.TraceEvent(TraceEventType.information,"Test 1 (trace source)"); Console.Writeline("Test 1 (console)"); } [TestMethod] public voID TestMethod2() { this.trace.TraceEvent(TraceEventType.information,"Test 2 (trace source)"); Console.Writeline("Test 2 (console)"); }}
App.config文件如下所示:
<?xml version="1.0" enCoding="utf-8" ?><configuration> <system.diagnostics> <trace autoflush="true" /> <sources> <source name="Demo" switchValue="Critical,Error,Warning,ActivityTracing,information,Verbose"> <Listeners> <add name="ConsoleTraceListener" /> <add name="TextfileListener" /> </Listeners> </source> </sources> <sharedListeners> <add name="ConsoleTraceListener" type="System.Diagnostics.ConsoleTraceListener" /> <add name="TextfileListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="tests.log" /> </sharedListeners> </system.diagnostics></configuration>
从Visual Studio运行测试时:
>第一次单元测试的输出是:
Test name: TestMethod1Test Outcome: PassedResult StandardOutput: Demo information: 0 : Test 1 (trace source)Test 1 (console)
Test name: TestMethod2Test Outcome: PassedResult StandardOutput: Test 2 (console)
虽然Console.Writeline的输出效果很好,但是没有显示TraceSource.TraceEvent中的输出.
通过执行mstest /testcontainer:UnitTestProject1.dll从控制台运行测试也会重现问题.第一次测试报告的标准输出包含两行;第二个测试的标准输出只有一行.
除了第一次测试之外,为什么没有跟踪记录?
解决方法 解决方法包括包装默认的TextWriter,它使用底层的Console.Out文本编写器来发送日志:public class CustomTextWriter : TextWriter{ public overrIDe EnCoding EnCoding { get { return Console.Out.EnCoding; } } public overrIDe voID Write(string value) { Console.Out.Write(value); } public overrIDe voID Writeline(string value) { Console.Out.Writeline(value); }}
然后,编写器将用于类似于one used in .NET Framework的自定义跟踪侦听器:
public class ConsoleTraceListener : TextWriterTraceListener{ public ConsoleTraceListener() : base(new CustomTextWriter()) { } public overrIDe voID Close() { }}
这在App.config中声明如下:
<add name="ConsoleTraceListener" type="UnitTestProject1.ConsoleTraceListener,UnitTestProject1,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />
这产生了预期的输出,尽管仍然不清楚为什么问题首先存在.通过检查Console.Out和底层流,在第一次测试结束后似乎没有处理或关闭的东西(如果它会,为什么the current implementation of Out
什么也不做,以及为什么发送到Console.Writeline的文本出现在日志中? )
以上是内存溢出为你收集整理的c# – 除了第一次单元测试之外,为什么发送到跟踪源的消息都丢失了?全部内容,希望文章能够帮你解决c# – 除了第一次单元测试之外,为什么发送到跟踪源的消息都丢失了?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)