单元测试-从Visual Studio/Microsoft测试框架运行时,Log4net无法找到配置文件



我们正在为在。net 4.0下运行的业务层编写单元测试。业务层是一个简单的c#类库,通常在SOAP和REST web服务中运行。我们的应用程序在一个单独的包装程序集中使用log4net进行日志记录。日志程序集中的c#代码有一个程序集信息指令,它告诉log4net配置文件的名称,一个la-

[组装:log4net.Config.XmlConfigurator (ConfigFile = " AcmeLogging。配置",看= true)

通过包装器初始化log4net在web服务中运行良好。当我们用单元测试程序集初始化它时,它似乎看不到配置文件。通过属性将配置文件复制到执行目录,我们确实在bindebug目录中看到它。使用从同一文件夹中运行的日志程序集的快速控制台测试程序可以正常工作。奇怪的是,行为问题是间歇性的,并且在不同的开发人员的机器上在不同的时间弹出,并且无法以任何确定的方式治愈。

逐步执行包装程序集代码,log4netLogManager.GetLogger()调用似乎正确返回,但是log.Logger.Repository.GetAppenders()返回的appender列表为空。由于无论文件是否在BinDebug文件夹中,这种不正确的行为都是相同的,我们认为它没有看到文件。

在微软测试框架中运行log4net的任何线索都将非常感谢。

单元测试的独特之处在于,如果在单元测试中需要配置文件,则需要将它们作为部署项包含进来。下面是我如何在测试类中这样做的一个示例:

[TestClass]
[DeploymentItem("hibernate.cfg.xml")]
public class AsyncForwardingAppenderTest
{
}

除了Deployment属性之外,您需要在您的测试设置中启用部署。要做到这一点,请进入测试->编辑测试设置->。然后点击右边的Deployment区域。单击复选框Enable Deployment

这样做并运行测试后,您的配置文件应该位于测试结果文件夹中。TestResultsusername_machine日期戳Out。如果你的配置文件不在这个文件夹中,它将无法工作。这就是deploymenttem属性所做的。它将文件粘贴到Out文件夹中。

如果您不想在每个测试类中包含deploymenttem属性,我所做的就是创建一个基测试类,所有使用log4net的测试都继承它,并使用deploymenttem属性对它进行标记。

最新更新