기존 웹 API 2 프로젝트의 단위 테스트를 작성하고 있습니다. 어떤 경우에 나는 Ploeh Autofixture
과 Moq
을 사용하고 있습니다.모의 HttpResponseMessage Moq 및 AutoFixture로 단위 테스트 API 사용하기
시험 방법은 :
[Test]
public async Task Service1_TestMethod() {
//some code here
var fakeemail = FakeBuilder.Create<string>("[email protected]");
var fakeUserInvite =
FakeBuilder.Build<UserInvite>()
.With(i => i.EmailAddress, fakeemail)
.With(i => i.Username, fakeemail)
.Create();
var fakeUserToken = FakeBuilder.Create<string>();
var fakeHttpResponseMessage =
Fixture.Build<HttpResponseMessage>()
.With(h => h.StatusCode, HttpStatusCode.OK).Create();
//Here i am mocking another service method. Whose response is HttpResponseMessage.
Service2.Setup(i => i.AddUser(fakeUserInvite, fakeUserToken))
.ReturnsAsync(fakeHttpResponseMessage);
var result = await Service1.AddUser(/* */);
}
서비스 1 방법 업데이트 :
public async Task<bool> AddUser(/* */)
{
var response = await Service2.AddUser(userInvite, userToken); // response is null even after mocking it.
// Add user code follows bassed on the above response.
}
난 후 모든 것이 작동 Service2.AddUser
전화를 언급합니다. 이 호출과는 별도로이 메소드에는 많은 코드가 있습니다. 이 통화에만 문제가 있습니다. 이 호출이 조롱 된 HttpResponseMessage
을 반환하면 모든 것이 작동합니다.
Service2
은 외부 API입니다. 나는 단지 mock
HttpResponseMessage
하는 방법을 궁금해합니다. 어떤 도움을 주셔서 감사합니다.
예외가 있습니까? 그렇다면 어느 것입니까? –
예외는 없습니다. 단지'response'는'Service2.AddUser' 호출에 대해 null입니다.나는'response'를'setup' 호출 중에 조롱 한 객체'fakeHttpResponseMessage'로하고 싶습니다. – Venky
'fakeUserInvite'와'fakeUserToken'이'Service2.AddUser' 메소드에 어떻게 전달되고 있습니까? 실제 호출은 Moq이'fakeHttpResponseMessage'를 리턴하기 위해 같은 객체를 사용해야합니다. Moq 설명서에서 [일치하는 인수] (https://github.com/Moq/moq4/wiki/Quickstart#matching-arguments)를 참조하십시오. –