无法使用basicHttpsBinding为单元测试执行错误配置WCF客户端

时间:2016-03-22 05:53:00

标签: c# wcf unit-testing resharper

尝试设置调用WCF服务的单元测试。在NET4.6下运行客户端使用basicHttpsBinding。

已经复制了system.serviceModel配置部分(其中包括basicHttpsBinding标记到单元Test的app.config。

当我运行测试(xUnit)时,我在客户端构造函数运行时收到以下错误。

Exception thrown: 'System.Configuration.ConfigurationErrorsException' in System.Configuration.dll

Additional information: Configuration binding extension 'system.serviceModel/bindings/basicHttpsBinding' could not be found. 
Verify that this binding extension is properly registered in system.serviceModel/extensions/bindingExtensions and that it is spelled correctly.

另一个答案建议添加以下内容(以确保至少net4.5正在执行测试。

<startup>
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>   
</startup>

任何线索?

编辑:这只是在resharper 10 Test Runer下失败。如果我使用CTRL-R,T并对InBuild运行器运行它可以正常工作。

我在Resharper中尝试了一些选项,

  • 强制CLR为4.5,
  • 禁用/启用卷影副本和
  • 自己跑 的AppDomain。

没有改变结果。

2 个答案:

答案 0 :(得分:0)

我没有看到任何明显的失败原因 - xunit插件(现在是ReSharper本身的一部分,从版本2016.1开始)与app.config文件一起使用。如果你可以log an issue,并且理想地附上解决方案(你可以私下这样做,所以只有JetBrains员工可以看到,或者我们可以在必要时做NDA)我可以帮你看看。

答案 1 :(得分:0)

我怀疑它类似于为什么我的类似WCF命令测试在Microsoft工具下失败...运行单个测试有效,因为它直接从\ bin \ Debug运行...但是运行多个单元作为有序测试因为运行而失败Microsoft使用名为QTAgentXXXXX.exe的可执行沙箱。

要找出运行测试的可执行文件,只需在早期断点,然后转储AppDomain.CurrentDomain.SetupInformation(特别注意TargetFrameworkName和ApplicationName属性),并转储对System.Diagnostics.Process的调用。 GetCurrentProcess()。MainModule.FileVersionInfo获取可执行路径。 将此可执行文件加载到ILSpy中,您可以查看它编译的框架。

Microsoft QTAgent应用程序位于C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ Common7 \ IDE \下,似乎存在多种变体,具体取决于所使用的.Net Framework或任何奇怪的检测方案他们用来挑一个.... 不幸的是,我发现最新的QTAgent32_40.exe是在旧的4.0 Framework下编译的,在你问之前,是的,有一个QTAgent32_40.exe.config而且没有,用sku = 4.6添加supportedRuntime设置不鼓励它运行任何不同(也许你会看到调整你的resharper 10 Test Runer配置的不同结果)。我已经尝试过几个线程中提到的assemblyBinding applyTo属性技巧也无济于事。 我试图使用ILSpy重新编译我自己的QTAgent版本而不是4.6.2但是很多被引用的Microsoft.VisualStudio.blah.blah程序集都有很多你无法构建的内部类。这些程序集具有名为InternalsVisibleTo的这种蹩脚的程序集属性,该属性列出了允许访问这些内部类的外部库和可执行文件。 QTAgent可执行文件属于这些属性,这就是他们可以从这些程序集中使用它们的原因。所以这将是一个非常长而深的兔子洞,看看是否可以基本上反编译所有这些相关的程序集并重新编译单元测试框架。这是一个很小的收获研究。我说螺丝微软的单元测试框架。它也充满了其他问题。我的同事一直建议使用NUnit。我想我可以尝试一下。