2016-01-06 96 views
0

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

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所有测试的所有跟踪信息?

回答

0

问题在于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将显示来自TraceSource输出在SomeDependency,但Test2不会。这是MSTest跑步者的一个限制。