Nsubstitute를 사용하여 RestClient (RestSharp에서)에 대한 ExecuteAsync 메서드를 조롱하려고했습니다. 나는 (여기서는 Mocking Restsharp executeasync method using moq를) MOQ를 사용하는 예를 본 적이 있지만, 다음 코드는 nsubstitute 사용하여 실패하는 이유는 내 인생은 이해할 수없는 경우 :Nsubstitute를 사용하여 RestClient ExecuteAsync를 조롱
RestClientMock.When(x => x.ExecuteAsync(Arg.Any<IRestRequest>(), Arg.Any<Action<IRestResponse>>()))
.Do(x => new RestResponse { StatusCode = HttpStatusCode.NotFound });
내가 그것을 설정하는 방법을 다음이 될 코드를 칠 것이다 과 같이 테스트 :
var tcs = new TaskCompletionSource<SendEmailResponse>();
_restClient.ExecuteAsync(_restRequest, (restResponse) => {
if (restResponse.StatusCode != HttpStatusCode.OK)
tcs.SetResult(new SendEmailResponse(ResponseType.Error, restResponse));
else if (!_enableEmails)
tcs.SetResult(new SendEmailResponse(ResponseType.EmailsTurnedOff, restResponse));
else
tcs.SetResult(new SendEmailResponse(ResponseType.Sent, restResponse));
});
return tcs.Task;
결코 모의 내 콜백 코드를 실행하는 것 같다 그냥 TCS가 설정되지 없구요으로 중단됩니다. 여기 아무나이 일을하는 방법에 대한 아이디어가 있습니까?
편집 : 해결. Nkosi에게 감사드립니다. 그래서 나는 아래에 설명 된 바와 같이 그것을 다시 새롭게하고 돌아 오지 않고 있었다. 내가 조심스럽게 문서를 읽었다면 David Tchepak이 언급 한 부분을 보았을 것입니다. 호출의 순서로
RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback);
:
당신은 조롱 방법에 전달 된 콜백 액션과 아무것도 할하지 않는 것 . – Nkosi
'.Do' 호출에서 여러분은'RestResponse'를 newing하고 있습니다 만, 그것은 어디에서도 사용되지 않으므로 무시 될 것입니다. @ Nkosi의 답변에 따라 응답을 콜백에 전달해야합니다. 참고 : http://nsubstitute.github.io/help/actions-with-arguments/, http://nsubstitute.github.io/help/callbacks/ –