我有一个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
所有测试的所有跟踪信息?
答案 0 :(得分: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跑步者的限制。