I am using FsUnit 2.1 (with NUnit 3.2) to write tests for an F# project. Here is a simple module:
namespace Library1
module LibraryFunctions =
let Execute f1 = f1()
let Id x = x
And here are my tests:
namespace Tests
open FsUnit
open NUnit.Framework
open Library1
[<TestFixture>]
type Tests() =
[<Test>]
// Passes
member x.``LibraryFunctions.Id should return the value``() =
LibraryFunctions.Id 42 |> should equal 42
[<Test>]
// Fails
member x.``LibraryFunctions.Execute should return the result of the function``() =
let f() = 42
LibraryFunctions.Execute f |> should equal 42
The second test fails (in NCrunch and ReSharper) with the message:
System.MissingMethodException : Method not found: '!!0 Library1.LibraryFunctions.Execute(Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Core.Unit,!!0>)'.
If I put the module under test in the same code file as the tests (rather than in a separate VS project) the test passes. My suspicion is that this is due to some issue with NUnit and F#/C# interop. If so, how can it be resolved?
Library1
in one project with F# core: 4.3.1.0 Then I have 'Testes" in another project with FsUnit: 2.1, NUnit: 3.2 and F# Core: 3.1.2.5 Specific Version: False. I am using VS 2015. I do not have NCrunch and ReSharper. The test are being run within VS using Test Explorer with NUnit VS Adapter installed. – BoyceLibrary1
is using FSharp.Core 4.4.0.0,Tests
is using 3.1.2.5 with Specific Version: false. – IneducationSystem.MissingMethodException : Method not found: 'Void FsUnit.TopLevelOperators.should(Microsoft.FSharp.Core.FSharpFunc`2<!!0,!!1>, !!0, System.Object)'
. Downgrading to 3.1.2.5 seems to work - but I'd rather not do that. – IneducationAssert.AreEqual
instead, and the same issue occurs as in my original question. – Ineducation