【问题标题】:Enabling trace sources in MSTest在 MSTest 中启用跟踪源
【发布时间】:2023-04-11 08:42:01
【问题描述】:

我有一个 DLL,它有点复杂,我正在编写测试。大多数被测类都有自己的TraceSource 对象,用于输出跟踪信息。

namespace MyDll
{
    public class Class1
    {
        static TraceSource tracing = new TraceSource(nameof(Class1));
        //Instance members and functions...
    }

    public class Class2
    {
        static TraceSource tracing = new TraceSource(nameof(Class2));
        //Instance members and functions...
    }

    public class Class3
    {
        static TraceSource tracing = new TraceSource(nameof(Class3));
        //Instance members and functions...
    }
}

MyDll 项目的内部是一个App.config 文件,它将一个公共ConsoleTraceListener 添加到所有TraceSource,如下所示:

<configuration>
  <system.diagnostics>
    <sources>
      <source name="Class1"
        switchName="sourceSwitch"
        switchType="System.Diagnostics.SourceSwitch">
        <listeners>
          <add name="console"/>
        </listeners>
      </source>
      <source name="Class2"
        switchName="sourceSwitch"
        switchType="System.Diagnostics.SourceSwitch">
        <listeners>
          <add name="console"/>
        </listeners>
      </source>
      <source name="Class3"
        switchName="sourceSwitch"
        switchType="System.Diagnostics.SourceSwitch">
        <listeners>
          <add name="console"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="sourceSwitch" value="Verbose"/>
    </switches>
    <sharedListeners>
      <add name="console"
            type="System.Diagnostics.ConsoleTraceListener">
        <filter type="System.Diagnostics.EventTypeFilter"
          initializeData="Verbose"/>
      </add>
    </sharedListeners>
  </system.diagnostics>
</configuration>

App.config 配置为始终复制到输出目录。我不确定这是否相关。

问题是:如果我运行 1 个测试,我会从测试的输出中获得所有跟踪信息。但是,如果我运行所有测试,则只有第一个测试运行会跟踪被测代码。所有其他测试都没有任何输出。

如何让 MSTest 输出来自所有 TraceSource 的所有测试的所有跟踪信息?

【问题讨论】:

    标签: visual-studio-2015 mstest trace tracelistener tracesource


    【解决方案1】:

    问题在于 MSTest。测试类中的静态对象将在第一个测试中被拾取,但不会在接下来的测试中被拾取。例如,

    public class SomeDependency
    {
       private static TraceSource tracing = new TraceSource("SomeDependency");
       public void FunctionUsed()
       {
          tracing.TraceEvent(TraceEventType.Informational, 1, "This function is being used");
       }
    }
    
    [TestClass]
    public class TestClass
    {
       static SomeDependency dependency;
    
       [ClassInitialize]
       public static void Init(TestContext context)
       {
          dependency = new SomeDependecy();
       }
    
       [TestMethod]
       public void Test1()
       {
          dependency.FunctionUsed();
       }
    
       [TestMethod]
       public void Test2()
       {
          dependency.FunctionUsed();
       }
    }
    

    Test1 将在SomeDependency 中显示来自TraceSource 的输出,但Test2 不会。这是 MSTest 运行器的限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多