私は FakeItEasy を使用するのが初めてで、最初の試みで立ち往生しています。偽造したいインターフェースには、次のようなメソッドがあります。
byte[] ReadFileChunk(string path,int offset,int count,out long size);
引数がどのように渡されるかを確認したいので、ReturnsLazily を使用しています。これが私の試みです:
long resSize;
A.CallTo(() => dataAttributesController
.ReadFileChunk(A<string>.Ignored, A<int>.Ignored, A<int>.Ignored, out resSize))
.ReturnsLazily((string path, int offset, int count) =>
{
return Encoding.UTF8.GetBytes("You requested: " + path + "(" + offset + "," + count + ")");
})
.AssignsOutAndRefParameters(123);
これはコンパイルされますが、実行すると次の例外が生成されます。
The faked method has the signature (System.String, System.Int32, System.Int32, System.Int64&), but returns lazily was used with (System.String, System.Int32, System.Int32).
どちらが正しいのですが、out パラメータを追加する方法がわかりません。ReturnLazily 部分を次のように変更すると:
.ReturnsLazily((string path, int offset, int count, out long size) =>
{
size = 0;
return Encoding.UTF8.GetBytes("You requested: " + path + "(" + offset + "," + count + ")");
})
コンパイルされず、エラーがわかりません:
error CS1593: Delegate 'System.Func<FakeItEasy.Core.IFakeObjectCall,byte[]>' does not take 4 arguments
error CS1661: Cannot convert lambda expression to delegate type 'System.Func<string,int,int,long,byte[]>' because the parameter types do not match the delegate parameter types
error CS1677: Parameter 4 should not be declared with the 'out' keyword
私のような初心者にとって、これは 4 つのパラメーターが好きではなく、「out」をどうするかを理解していないように見えます。誰かがこれらのエラーをどのように読むべきか説明してもらえますか? 実際の例も大歓迎です:-)
どうもありがとう!
- - 編集 - -
これはうまくいくようです:
A.CallTo(() => dataAttributesController
.ReadFileChunk(A<string>.Ignored, A<int>.Ignored, A<int>.Ignored, out resSize))
.ReturnsLazily(x =>
Encoding.UTF8.GetBytes("You requested: " + x.Arguments.Get<string>(0) + "(" + x.Arguments.Get<int>(1) + "," + x.Arguments.Get<int>(2) + ")"))
.AssignsOutAndRefParameters((long)123);
私が望んでいたよりも少し読みにくいですが、これはReturnsLazilyの使用目的に近いですか?