无法在NUnit中禁用System.Diagnostics.Trace

时间:2016-04-07 20:25:46

标签: .net nunit trace system.diagnostics

在我们的生产应用程序中,我们有一个自定义Trace Listener,但在测试应用程序的特定单元时不存在。所以我想轻松禁用跟踪。如果我不这样做,我将从默认跟踪侦听器收到错误,说格式字符串不正确。

我可以通过编码来做到这一点(这有效):

[Setup]
public void Setup()
{
    System.Diagnostics.Trace.Listeners.Clear();
}

但找到所有[设置]并添加代码行是很繁琐的。相反,我想修改配置文件。

因此,对于我的测试(test.dll),我有一个配置文件test.dll.config。它看起来像:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.diagnostics>
    <trace>
      <listeners>
        <clear/>
      </listeners>
    </trace>
  </system.diagnostics>

  <appSettings>
    <add key="StartingMonthColumn" value="7"/>
    <add key="CategoryHeadingColumn" value="1"/>
  </appSettings>
</configuration>

但这不起作用。我知道配置已加载,因为我可以读取StartingMonthColumn的值。

但是system.diagnostics部分似乎被忽略了。

1 个答案:

答案 0 :(得分:0)

NUnit使用test.dll.config文件进行一些操作。跟踪没有任何作用。如果您修改了NUnit自己的配置文件,那么您可能会有一些运气,这正是.NET所关注的。作为测试,修改控制台运行器的配置。使用命令行选项指定测试应在同一进程中运行 - / process:Single将在NUnit 2.6.4和3.0+中运行。如果这样做,您还必须修改两个NUnit代理的配置,以便在流程用完时。

另一种基于代码的方法是为每个程序集创建一个顶级SetUpFixture,并将禁用代码放在SetUp(2.6.4)或OneTimeSetUp(3.x)方法中。