所以我刚刚开始使用F#,我遇到了一个非常奇怪的问题,当我使用FSharp PowerPack中的某些方法时会抛出System.MissingMethodException。
同一模块中的所有方法都不会发生这种情况。如果我将程序集编译为Application而不是类库,也不会发生这种情况。
复制步骤:
在每个程序集中创建以下测试夹具。
open NUnit.Framework
[<TestFixture>]
type Tests() = class
[<Test>]
member self.OfSeq() =
// Will always succeed
Matrix.Generic.ofSeq [[1]] |> ignore
[<Test>]
member self.OfList() =
// Will fail under certain conditions with a System.MissingMethodException
Matrix.Generic.ofList [[1]] |> ignore
end
当我这样做时,应用程序运行正常(所有测试都通过),但类库失败,出现以下异常:
System.MissingMethodException : Method not found: 'Microsoft.FSharp.Math.Matrix`1<!!0> Generic.ofList(Microsoft.FSharp.Collections.FSharpList`1<Microsoft.FSharp.Collections.FSharpList`1<!!0>>)'.
at Temp2.Tests.OfList()
这里发生了什么?
产生问题的另一种方法是matrix.PermuteColumns。
其他信息:
如果有其他信息可以使用,请告诉我。
答案 0 :(得分:12)
(回答以后参考,因为这个Q是第一次搜索。)
使用Visual Studio 2013 ,使用Brian引用的“F#MSTest”在线项目模板,Brian的建议都没有帮助(首先,测试的目标是没有{{1的库项目}})。
但是我最终发现测试项目设置为使用F#3运行时(使用FSharp.Core V4.3.0.0)。将其更改为F#v3.1(FSharp.Core V4.3.1.0)解决了这个问题。
答案 1 :(得分:3)
我想知道这是否与绑定重定向有关。您可能需要将应用程序项目中的app.config复制到库项目。
这听起来类似于一个已知问题,我正在撰写一篇关于F#团队博客的博客文章(可能会在未来几周内出现)关于MSTest而不是NUnit。我会尝试将app.config复制到库项目中,如果这不起作用,那么请使用在线模板进行单元测试:
http://visualstudiogallery.msdn.microsoft.com/51ebe64a-899b-4959-8c24-b0148ed6b264
并从VS中的菜单中选择“TEST \ Test Settings \ Select Test Settings File”,并将其指向单元测试项目模板中包含的“MSTest.runsettings”文件。我希望这两个调整中的一个能够在MSTest案例中修复它。