F# 上与 NSubstitute 的模拟接口不允许 Returns

Mocked Interface with NSubstitute on F# does not allow Returns

我有以下代码:

open NSubstitute
type MyClass()=
    let myObject = Substitute.For<IMyInterface>()
    do myObject.MyProperty.Returns(true)
    do myObject.MyMethod().Returns(true)

On "Returns"(两者)我收到未定义的错误。等效的 C# 代码可以正常工作。在 do 行的末尾添加 |> ignore 没有帮助。我是不是遗漏了什么?

我知道你写道在末尾添加 |> ignore 没有帮助,但这在我的机器上编译:

type IMyInterface =
    abstract MyProperty : bool with get, set
    abstract member MyMethod : unit -> bool

open NSubstitute

type MyClass() =
    let myObject = Substitute.For<IMyInterface>()
    do myObject.MyProperty.Returns(true) |> ignore
    do myObject.MyMethod().Returns(true) |> ignore

我试图从问题中推断出 IMyInterface 的定义;我是不是看错了?

因此,在我通过使用 fsc 和 VS2013 的直接编译在 VS2012、fsi 上尝试代码(Mark Seemann 的,以避免我的 C# class)之后,问题显然是 VS2012 问题。该代码与其他三个代码一起正常工作。

还不确定它是否使用不同版本的 F#。将需要进一步调查。但至少,现在,在 VS2012 上我可以使用:

do SubstituteExtensions.Returns(myObject.MyProperty, true) |> ignore

当我需要将参数传递给方法时,它也能正常工作。