2016-01-06 95 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跑步者的一個限制。