使用Unquote断言时出现MissingMethodException

时间:2012-12-12 18:50:05

标签: f# nunit missingmethodexception f#-unquote

我正在尝试将unquote与NUnit一起用作测试运行器。测试用例来自Getting Started,并且在NUnit之外运行时按预期工作:

namespace FsTest.Tests

open NUnit.Framework
open Swensen.Unquote

[<TestFixture>]
module Example =

    [<Test>]
    let foo() = 
        test <@ (1+2)/3 = 1 @>

在NUnit下我得到了这个例外:

  

FsTest.Tests.Example.foo:System.MissingMethodException:Method not not   发现:   “System.Tuple 2<Microsoft.FSharp.Collections.FSharpList 1,Microsoft.FSharp.Quotations.FSharpExpr&GT;   Internal.reduceFullyAndGetLast(Microsoft.FSharp.Quotations.FSharpExpr)”

我想知道上面的代码是否有任何问题以及如何使其工作。如果有帮助,Unquote的raise会以同样的方式失败。

1 个答案:

答案 0 :(得分:8)

根据您的问题描述,我怀疑您需要使用FSharp.Core绑定重定向从版本4.0.0.0到版本4.3.0.0配置您的NUnit项目,因为最新版本的Unquote是为.NET构建的4.0和您的测试项目的目标是.NET 4.5。

有关详细信息,请参阅this取消引用问题。我相信你的配置看起来像

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

我不确定你需要将它放在NUnit项目的确切位置,但可能在通过Project Editor指定的配置文件中?

不幸的是,我没有安装VS2012,所以我在为你真正诊断这个问题的能力上有点瘫痪。