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

NUnit测试调用WCF Web服务(.NET C#)的.dll调用,c#,.net,wcf,nunit,C#,.net,Wcf,Nunit,这在某种程度上与: 我有一个.NETC#类库(DLL),它调用WCFWeb服务。似乎任何调用该.DLL的.exe现在都必须在其.exe.config文件中具有web服务配置 例如,如果我编写一个NUnit测试,那么我必须用web服务parms更新NUnit.exe.config。这似乎很难管理。我是不是遗漏了一个要点?有捷径吗?如果我有几十个WCF服务和几十个NUnit测试,我的NUnit.exe.config看起来会很可怕 谢谢 尼尔·沃尔特斯不,你没有遗漏任何东西。在.NET中,默认情况下

这在某种程度上与:

我有一个.NETC#类库(DLL),它调用WCFWeb服务。似乎任何调用该.DLL的.exe现在都必须在其.exe.config文件中具有web服务配置

例如,如果我编写一个NUnit测试,那么我必须用web服务parms更新NUnit.exe.config。这似乎很难管理。我是不是遗漏了一个要点?有捷径吗?如果我有几十个WCF服务和几十个NUnit测试,我的NUnit.exe.config看起来会很可怕

谢谢


尼尔·沃尔特斯不,你没有遗漏任何东西。在.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>

不幸的是,您只能外部化配置节,而不能外部化配置节组(并且
是一个配置节组:-(因此您不能全局外部化它)


Marc

出于单元测试的目的,在客户端,您应该模拟web服务代理接口,以便客户端调用您的模拟,而无需将系统的其余部分安装到位

在应用程序中,您可能会发现以编程方式将参数(如地址和绑定)显式地传递到WCF层更方便——由应用程序决定是否使用自己的配置


编辑--扩展第一个点

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

通道
的使用隔离到一个方法中,您可以在测试线束中重写或替换该方法,该方法返回接口类型的对象。然后在单元测试中,交换您自己的方法,该方法返回模拟


练习完整的WCF连接——以及单元测试无法涵盖的少量手写代码——是系统或集成测试阶段的一部分。

我认为这是有意义的。如果我有5个应用程序都在NUnit中进行了测试,那么我可以有extensionsApp1.config、behaviorsApp1.config等,但我仍然需要5个每个web服务的配置文件-yikes。你能详细说明第一句话吗,我甚至不确定我是否理解。你是说我应该自己做管道,而不使用自动生成的代理吗?仍在考虑这个想法。根据要求进行编辑以详细说明。将连接移动到自己的类,以便dll有一个c点连接服务,从该类中提取接口并模拟:)