[英]Delegate does not take N arguments (FakeItEasy / C# 9.0)
C# 9.0,FakeItEasy 7.3.1
這可能只是我很笨,但是......為什么 FakeItEasy 抱怨委托的參數不匹配??? 幾個小時以來,我一直用頭撞牆。
public interface IBaseInterface<T> {
//Not detailed here, for simplification
}
public interface IMyInterface : IBaseInterface<T> {
public Task<IEnumerable<T>> SearchByCriteriaAsync(
Guid param0,
Guid? param1,
FooClass param2,
BarClass? param3,
IEnumerable<Guid> param4,
bool param5 = true,
bool param6 = false,
bool param7 = true,
IReadOnlyCollection<Guid>? param8 = null);
}
internal class MyClass : IMyInterface {
public Task<IEnumerable<T>> SearchByCriteriaAsync(
Guid param0,
Guid? param1,
FooClass param2,
BarClass? param3,
IEnumerable<Guid> param4,
bool param5 = true,
bool param6 = false,
bool param7 = true,
IReadOnlyCollection<Guid>? param8 = null)
{
return new List<T>().AsEnumerable();
}
}
測試 class:
IMyInterface fake = A.Fake<IMyInterface>();
A.CallTo(() => fake.SearchByCriteriaAsync(
A<Guid>.Ignored,
A<Guid?>.Ignored,
A<FooClass>.Ignored,
A<BarClass?>.Ignored,
A<IEnumerable<Guid>>.Ignored,
A<bool>.Ignored,
A<bool>.Ignored,
A<bool>.Ignored,
A<IReadOnlyCollection<Guid>?>.Ignored
))
.ReturnsLazily(
(
Guid param0,
Guid? param1,
FooClass param2,
BarClass? param3,
IEnumerable<Guid> param4,
bool param5 = true,
bool param6 = false,
bool param7 = true,
IReadOnlyCollection<Guid>? param8 = null
) => {
return new List<T>().AsEnumerable();
}
);
“ReturnsLazily(...)”中的所有內容都以紅色突出顯示,錯誤消息“ Error CS1593 Delegate 'Func<IFakeObjectCall, Task<IEnumerable<T>>>' does not take 9 arguments
”
如果我到處刪除參數“customerId”,那么編譯器就會停止抱怨
FakeItEasy 具有最多 8 個參數的ReturnsLazily
重載(這是一個任意限制,我們本可以停在 4 或 12 個,但它似乎是一個合理的數量)。
由於您要傳遞一個帶有 9 個參數的委托,因此它與任何重載都不匹配。 編譯器假設(錯誤地)您正在嘗試調用接受Func<IFakeObjectCall, Task<IEnumerable<T>>>
的重載,但您傳遞的委托與該委托不匹配,因此它失敗了。
解決此問題的最佳方法可能需要重構您的代碼,以便您的方法不需要采用這么多參數。 如果您不能或不想這樣做,解決方法是使用適用於IFakeObjectCall
的重載:
...
.ReturnsLazily(call => new List<T>().AsEnumerable());
(請注意,如果您需要訪問委托中的參數值,可以使用call.GetArgument<Guid>(0)
、 call.GetArgument<FooClass>("param2")
等)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.