FsUnit:由于它而无法测试可移植库,并且测试项目具有不同的F#。核心版本

时间:2016-09-21 06:30:48

标签: f# nunit fsunit

我有一个便携式库,FSharp.Core版本为3.7.4.0。安装(在单元测试项目中)FsUnit作为依赖项安装FSharp.Core版本3.1.2.5

因此,在我的单元测试项目中使用便携式库的功能,例如:

module StammaTests.PieceTests

open Stamma
open NUnit.Framework
open FsUnitTyped

[<Test>]
let ``Testing a Basic function`` () =
    Piece.toChar Black King |> shouldEqual 'k'

产生错误:

  

结果消息:System.IO.FileLoadException:无法加载文件或程序集&#39; FSharp.Core,Version = 3.7.4.0,Culture = neutral,   公钥= b03f5f7f11d50a3a&#39;或其中一个依赖项。该   定位程序集的清单定义与程序集不匹配   参考。 (HRESULT异常:0x80131040)

尝试将FSharp.Core版本从NuGet更新为4.0.0.1(甚至在更新时检查两个项目),现在甚至可以像以下一样简单:

[<Test>]
let ``Testing the test`` () = 1 |> shouldEqual 1 

不起作用,给出了类似的错误。

  

结果消息:System.IO.FileLoadException:无法加载文件或   assembly&#39; FSharp.Core,Version = 4.3.1.0,Culture = neutral,   公钥= b03f5f7f11d50a3a&#39;或其中一个依赖项。该   定位程序集的清单定义与程序集不匹配   参考。 (HRESULT异常:0x80131040)

第一次失败测试的错误并没有改变。

我觉得我错过了一些非常明显的东西,我找到了几个有类似问题的人,但我不明白他们做了什么来解决它(他们似乎都解决了它。)例如{ {3}}

修改

这两个项目都是库,我没有app.config文件来添加任何内容。

2 个答案:

答案 0 :(得分:1)

app.config文件中添加绑定重定向,将所有FSharp.Core绑定重定向到所需的版本。例如,要使用版本4.4.0,您的app.config文件将如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.4.0.0" newVersion="4.4.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

答案 1 :(得分:0)

我找到了一个实际有效的解决方案here

基本上,将App.config添加到测试项目中,然后编写以下内容:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.6.4.14350" newVersion="2.6.4.14350" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

它增加了与 {/ em> Fsharp.CoreNUnit.Framework的绑定,这与通常只添加Fsharp.Core绑定的解决方案不同。