Moq ReturnsAsync sử dụng nhiều tham số
Tôi đã sử dụng ReturnsAsyncchức năng từ Moq thành công một chút, nhưng đã gặp sự cố với phần sau. Tôi luôn trả về null trong khi tôi thêm các tham số vào biểu thức lambda của mình ... lần này khi tôi đã thêm tất cả chúng, tôi nhận được thông báo đáng sợ "Không thể chuyển đổi biểu thức lambda thành kiểu ..." Có điều gì rõ ràng mà tôi nhận được không Sai lầm? Các Setupphương pháp giải quyết hoàn toàn tốt đẹp ... chỉ cần khôngReturnsAsync
Có giới hạn cho bao nhiêu tham số có thể được xác định? Tôi đã thử và nhận thấy rằng nó xuất hiện sau tham số thứ 15 ...
var buildServiceMock = new Mock<IBuildService>();
buildServiceMock
.Setup(bsm => bsm.QueryBuildsAsync(
It.IsAny<BuildType>(),
It.IsAny<string>(),
It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(),
It.IsAny<string>(),
It.IsAny<BuildReason?>(),
It.IsAny<BuildStatus?>(),
It.IsAny<BuildResult?>(),
It.IsAny<IEnumerable<string>>(),
It.IsAny<IEnumerable<string>>(),
It.IsAny<int?>(),
It.IsAny<int?>(),
It.IsAny<QueryDeletedOption?>(),
It.IsAny<BuildQueryOrder?>(),
It.IsAny<string>(),
It.IsAny<IEnumerable<int>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.ReturnsAsync((
BuildType buildType,
string buildNumber,
DateTime? minDateTime,
DateTime? maxDateTime,
string requestedFor,
BuildReason? reasonFilter,
BuildStatus? statusFilter,
BuildResult? resultFilter,
IEnumerable<string> tags,
IEnumerable<string> properties,
int? top,
int? maxBuildsPerDefinition,
QueryDeletedOption? deletedFilter,
BuildQueryOrder? queryOrder,
string branchName,
IEnumerable<int> buildIds,
string label,
CancellationToken cancellationToken) =>
{
return null;
});
Trả lời
Những gì tôi phát hiện ra là gốc rễ của vấn đề của tôi là ...
public static IReturnsResult<TMock> ReturnsAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TMock, TResult>(this IReturns<TMock, ValueTask<TResult>> mock, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> valueFunction) where TMock : class;
ReturnsAsync ở mức tối đa sẽ chỉ cho phép bạn sử dụng tối đa 15 tham số trong chữ ký biểu thức lambda của bạn.
Tuy nhiên, tôi chỉ cần một IEnumerable trong phương thức ủy nhiệm ReturnsAsync của mình, vì vậy tôi tốt ... Tôi đã nhầm lẫn ở chỗ tôi nghĩ rằng tôi phải chỉ định một tham số cho mọi người tham số trong phương thức đang được giả lập trong lệnh gọi "Thiết lập". ..bởi rằng tôi thấy bạn không cần phải làm như vậy, tôi tốt để đi. :)