这在某种程度上与:
创建wcf Web服务实例时出现InvalidOperationException
我有一个.NET C#类库(DLL)调用WCF Web服务.似乎任何调用.DLL的.exe现在必须在其.EXE.config文件中具有Web服务配置.
因此,例如,如果我编写NUnit测试,那么我是否必须使用Web服务参数更新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>
Run Code Online (Sandbox Code Playgroud)
不幸的是,您只能外部化配置部分而不能配置部分组(并且<system.serviceModel>是配置部分组:-(因此您无法全局外化).
渣
对于单元测试目的,在客户端,您应该模拟Web服务代理接口,以便客户端调用您的模拟而无需将系统的其余部分放在适当的位置.
在应用程序中,您可能会发现以明确的方式将参数(如地址和绑定)传递到WCF层更方便 - 将应用程序留给应用程序是否使用自己的配置.
编辑 - 扩展第一点.
WCF的目的是获取一个接口并提供一个在其他地方运行的实现(通过Channel泛型类型).在单元测试中,您希望能够将WCF生成的实现替换为具有本地模拟的接口.
将使用隔离Channel到可以在测试工具中覆盖或替换的方法中,并返回接口类型的对象.然后在单元测试中,交换自己的方法,返回mock.
然后,执行完整的WCF连接 - 以及单元测试中无法涵盖的少量手写代码 - 是系统或集成测试阶段的一部分.
| 归档时间: |
|
| 查看次数: |
2989 次 |
| 最近记录: |