Включение источников трассировки в 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.