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# で設定できますか?