Включение источников трассировки в MSTest

У меня есть 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 для всех тестов?

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 покажет вывод из TraceSource в SomeDependency, но Test2 не буду. Это ограничение для бегуна MSTest.

Другие вопросы по тегам