NUnit测试调用调用WCF Web服务的.DLL(.NET C#)

Nea*_*ers 2 .net c# wcf nunit

这在某种程度上与:

创建wcf Web服务实例时出现InvalidOperationException

我有一个.NET C#类库(DLL)调用WCF Web服务.似乎任何调用.DLL的.exe现在必须在其.EXE.config文件中具有Web服务配置.

因此,例如,如果我编写NUnit测试,那么我是否必须使用Web服务参数更新NUnit.exe.config.这似乎很难管理.我在这里错过了一个重点吗?任何捷径?如果我有几十个WCF服务和几十个NUnit测试,看起来我的NUnit.exe.config会很可怕.

谢谢,

尼尔沃尔特斯

mar*_*c_s 5

不,你没有遗漏任何东西.在.NET中,配置默认留给托管应用程序 - 在ASP.NET中运行Web运行时及其配置文件 - web.config.

在类库中,它是托管应用程序,它使用类库,负责通过它的app.config( - >编译后的YourApp.exe.config)提供配置.

您可以做的事情是将WCF的web.config部分外部化为单独的*.config文件,然后再次引用testapp.exe.config中的那些:

  <system.serviceModel>
    <extensions configSource="extensions.config" />
    <behaviors configSource="behaviors.config" />
    <bindings configSource="bindings.config" />
    <client configSource="client.config" />
    <services configSource="services.config" />
  </system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

不幸的是,您只能外部化配置部分而不能配置部分组(并且<system.serviceModel>是配置部分组:-(因此您无法全局外化).


Ste*_*ham 5

对于单元测试目的,在客户端,您应该模拟Web服务代理接口,以便客户端调用您的模拟而无需将系统的其余部分放在适当的位置.

在应用程序中,您可能会发现以明确的方式将参数(如地址和绑定)传递到WCF层更方便 - 将应用程序留给应用程序是否使用自己的配置.


编辑 - 扩展第一点.

WCF的目的是获取一个接口并提供一个在其他地方运行的实现(通过Channel泛型类型).在单元测试中,您希望能够将WCF生成的实现替换为具有本地模拟的接口.

将使用隔离Channel到可以在测试工具中覆盖或替换的方法中,并返回接口类型的对象.然后在单元测试中,交换自己的方法,返回mock.

然后,执行完整的WCF连接 - 以及单元测试中无法涵盖的少量手写代码 - 是系统或集成测试阶段的一部分.