c# – 除了第一次单元测试之外,为什么发送到跟踪源的消息都丢失了?

c# – 除了第一次单元测试之外,为什么发送到跟踪源的消息都丢失了?,第1张

概述我观察到Visual Studio Enterprise 2015 Update 1的奇怪行为.在单元测试中使用通过.NET Framework TraceSource进行日志记录时,只有第一个单元测试包含日志记录输出. 这是重现问题的方法: 空单元测试项目包含UnitTest1类,如下所示: using System;using System.Diagnostics;using Micros 我观察到Visual Studio Enterprise 2015 Update 1的奇怪行为.在单元测试中使用通过.NET Framework TraceSource进行日志记录时,只有第一个单元测试包含日志记录输出.

这是重现问题的方法:

空单元测试项目包含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# – 除了第一次单元测试之外,为什么发送到跟踪源的消息都丢失了?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1232035.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存