Moq ReturnsAsync menggunakan banyak parameter
Saya telah menggunakan ReturnsAsyncfungsi dari Moq dengan sedikit keberhasilan, tetapi mengalami masalah dengan berikut ini. Saya selalu mengembalikan nol saat menambahkan parameter ke ekspresi lambda saya ... kali ini ketika saya menambahkan semuanya, saya mendapatkan pertanyaan "Tidak dapat mengubah ekspresi lambda menjadi jenis ..." Apakah ada sesuatu yang jelas yang saya dapatkan salah? The SetupMetode resolves baik-baik saja ... hanya tidakReturnsAsync
Apakah ada batasan berapa banyak parameter yang dapat ditentukan? Saya sudah mencoba dan memperhatikan bahwa itu keluar setelah parameter ke-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;
});
Jawaban
Apa yang saya temukan adalah akar dari masalah saya adalah ini ...
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 at max hanya akan memungkinkan Anda menggunakan hingga 15 parameter dalam tanda tangan ekspresi lambda Anda.
Namun saya hanya membutuhkan satu IEnumerable dalam metode delegasi ReturnsAsync saya, jadi saya baik-baik saja ... Saya salah karena saya pikir saya harus menentukan parameter untuk semua orang parameter dalam metode yang diejek dalam panggilan "Setup". ..sekarang bahwa saya telah menemukan Anda tidak perlu melakukan itu, saya baik untuk pergi. :)