【问题标题】:Is log4net killing my WCF unit tests?log4net 会杀死我的 WCF 单元测试吗?
【发布时间】:2009-10-22 05:39:50
【问题描述】:

我的解决方案中有三个项目:

  • 提供我想要测试的功能的 WCF Web 服务
  • 调用该 Web 服务的 Web 应用程序
  • 在服务上运行测试的测试项目。

Web 服务和 Web 应用程序都使用带有单独配置文件的 log4net 和 AssemblyInfo.cs 中的这一行进行配置:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

当我浏览到 Web 服务的 URL (http://localhost/MyWebService/MyWebService.svc) 时,它按预期显示 - 信息和 wsdl 的链接。

当我使用 Web 应用程序时,一切正常。代码调用 Web 服务并获得正确的响应作为回复。从 Web 应用程序和 Web 服务进行日志记录。

但是,当我运行单元测试时,它们都失败了,并出现以下异常:

Test method MyServiceTest.MyServiceAuthTest.TestValidateCorrectly threw exception: System.ServiceModel.ServiceActivationException: The requested service, 'http://localhost/MyWebService/MyWebService.svc' could not be activated. See the server's diagnostic trace logs for more information.

在我的本地计算机的事件日志中,我收到以下消息:

WebHost failed to process a request. Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/12905972 Exception: System.ServiceModel.ServiceActivationException: The service '/MyWebService/MyWebService.svc' cannot be activated due to an exception during compilation. The exception message is: Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821' or one of its dependencies. Strong name signature could not be verified. The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045).

我已经删除和替换了引用,清理和重建,甚至清除了临时的 asp.net 文件,但都无济于事。网站调用服务没有问题,但测试失败。

有人知道这里会发生什么吗?

更新:我删除了对 log4net 的所有引用,测试运行并成功,没有出现任何问题。显然,这远非可取。有什么建议吗?

更新 2:这两件事的结合解决了问题:

  • 在我的测试项目中添加了对 log4net 的引用,确保完全初始化它。
  • 使用 log4net 1.2.10 的发布版本而不是调试版本。

【问题讨论】:

    标签: c# wcf unit-testing log4net


    【解决方案1】:

    您的单元测试中是否有对 log4net 库的参考?试试看。

    这背后的原因:大多数单元测试框架在测试运行期间将二进制文件隐藏到其他地方,但这样做他们并没有在所有情况下都找到深度嵌套的引用。我曾经在 NHibernate 和 log4net 上遇到过这个问题。在 MSTest 的情况下,您无法停用阴影。 NUnit GUI 有一个选项,但我没有安装它,所以你必须自己寻找它:-)

    【讨论】:

    • 这是一个很好的解释。另一种解决方法是使用其他方式来配置 log4net。例如,改为在代码中加载配置文件,这是我的首选,因为它允许您处理文件丢失的异常情况。
    • 说实话,我认为我没有成功。我现在在家,但当我回到工作岗位时,我肯定会再去一次。我可能在某些时候错过了一步......
    • 不完全确定是什么解决了问题,但这肯定有帮助。我添加了对测试项目的引用并在init中对其进行了实例化,但仍然失败。我删除了对 log2net 调试的引用并将其替换为发布版本,一切正常。顺便说一下 1.2.10 版...
    【解决方案2】:

    我还会考虑将 log4net 处理添加到您的单元测试配置中。无论如何,这在查看失败时非常有用。
    这个link 为 NUUnit 解释了它,其他框架也应该可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 2011-10-30
      • 1970-01-01
      • 2010-12-12
      相关资源
      最近更新 更多