많은 매개 변수를 사용하는 Moq ReturnsAsync
Nov 21 2020
ReturnsAsync
Moq 의 기능을 잠시 동안 성공적 으로 사용 했지만 다음과 같은 문제가 발생했습니다. 람다 식에 매개 변수를 추가하는 동안 항상 null을 반환합니다. 이번에는 모든 매개 변수를 추가했을 때 "람다 식을 형식으로 변환 할 수 없습니다 ..."라는 두려운 메시지가 표시됩니다. 잘못된? 이 Setup
방법은 완벽하게 잘 해결됩니다 ...ReturnsAsync
정의 할 수있는 매개 변수 수에 제한이 있습니까? 나는 시도했고 그것이 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;
});
답변
1 Toffer Nov 24 2020 at 02:08
내가 발견 한 것은 내 문제의 근원은 이것이다 ...
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;
ReturnAsync at max는 람다 식의 서명에 최대 15 개의 매개 변수 만 사용할 수 있도록 허용합니다.
그러나 내 ReturnsAsync 델리게이트 메서드 내에서 IEnumerable 하나만 필요했기 때문에 좋습니다. "Setup"호출에서 모의되는 메서드에서 모든 매개 변수에 대한 매개 변수를 지정해야한다고 생각했습니다. .. 이제 당신이 그렇게 할 필요가 없다는 것을 알았으니 갈 수 있습니다. :)