2012-12-12 76 views
5

我試圖使用unquote與NUnit作爲測試運行器。測試用例從Getting Started拍攝及工務局當外界的NUnit的預期運行:MissingMethodException當使用Unquote斷言

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而:方法不是 找到: 'System.Tuple 2<Microsoft.FSharp.Collections.FSharpList 1,Microsoft.FSharp.Quotations.FSharpExpr> Internal.reduceFullyAndGetLast(Microsoft.FSharp.Quotations.FSharpExpr)'。

我想知道上面的代碼是否有問題,以及如何使它工作。如果有幫助,Unquote的raise也會以相同的方式失敗。

+0

你能否澄清一下你的意思是「在NUnit之外運行」和「在NUnit之下」?這個問題看起來與http://stackoverflow.com/q/7828852/236255非常相似,除了使用xUnit.net GUI測試運行器,OP得知他引用了錯誤版本的FSharp.Core.dll –

+0

*「跑到外面NUnit「*表示使用F#Interactive或來自同一解決方案的命令行應用程序; *「在NUnit下」*表示使用庫存NUnit 2.6.2 GUI runner作爲zip文件下載。從測試程序集引用FScharp.Core.dll:''。整個事情是針對.NET 4.5的VS 2012。 –

回答

8

基於你的問題的描述,我懷疑你需要配置NUnit項目的FSharp.Core綁定重定向從4.0.0.0版本到4.3.0.0版,因爲最新版本的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,因此我在我的真正診斷這個問題對您有所能力削弱。

+1

太好了,幫助,謝謝。對於那些有興趣的人,NUnit使用' .dll.config'來配置測試DLL,這就是你放置這些設置的地方。 –