1

F# と Foq を使用して、C# プロジェクトの単体テストを作成しています。

メソッドにパラメーターがあるインターフェイスのモックを設定しようとしていoutますが、開始する方法さえわかりません。おそらくコードの引用に関係していますが、私の理解はここまでです。

インターフェイスは次のとおりです。

public interface IGetTypeNameString
{
    bool For(Type type, out string typeName);
}

C# では、インターフェイスの Foq の使用法は次のようになります。

[Fact]
public void Foq_Out()
{
    // Arrange
    var name = "result";
    var instance = new Mock<IGetTypeNameString>()
        .Setup(x => x.For(It.IsAny<Type>(), out name))
        .Returns(true)
        .Create();

    // Act
    string resultName;
    var result = instance.For(typeof(string), out resultName);

    // Assert
    Assert.True(result);
    Assert.Equal("result", resultName);
}

F# でそれを実現する方法については、完全に迷っています。私はの線に沿って何かを試しました

let name = "result"
let instance = Mock<IGetTypeNameString>().Setup(<@ x.For(It.IsAny<Type>(), name) @>).Returns(true).Create();

その結果、引用式に下線が引かれ、次のエラー メッセージが表示されます。

This expression was expected to have type IGetTypeNameString -> Quotations.Expr<'a> but here has type Quotations.Expr<'b>

a と b がどのような型であると想定されているかを示していないため、これを修正する方法がわかりません。

:?>

( を使用するとさらにワイルドになりますopen Foq.Linq。その後、[エラー リスト] ウィンドウが のようなオーバーロードの可能性についてAction<'TAbstract> -> ActionBuilder<'TAbstract>通知し始め、さらに迷子になります....)

どんな支援や説明も大歓迎です!

編集:

そのため、ここで述べたように、byref/out パラメータはコードの引用では使用できません。これを F# で設定できますか?

4

1 に答える 1