0
내 리포지토리 계층에서 Web API 메서드를 호출하고 있습니다. 아무도 모의를 사용하여 테스트하는 방법을 제안 할 수 있습니까?단위 테스트 웹 API 호출 방법 방법
내 리포지토리 계층에서 Web API 메서드를 호출하고 있습니다. 아무도 모의를 사용하여 테스트하는 방법을 제안 할 수 있습니까?단위 테스트 웹 API 호출 방법 방법
호출을 웹 API 메서드로 조롱하려면 호출하는 코드를 추상화해야합니다.
그래서 추상적 인 것이 :
public interface IMyApi
{
MyObject Get();
}
다음은 실제 API 호출에 HttpClient를 사용하는이 인터페이스의 특정 구현 할 수 : 이제
public class MyApiHttp: IMyApi
{
private readonly string baseApiUrl;
public MyApiHttp(string baseApiUrl)
{
this.baseApiUrl = baseApiUrl;
}
public MyObject Get()
{
using (var client = new HttpClient())
{
client.BaseAddress = this.baseAddress;
var response = client.GetAsync('/api/myobjects').Result;
return response.Content.ReadAsAsync<MyObject>().Result;
}
}
}
을 저장소 계층 단순히 의지를 이 추상화를 생성자 인수로 사용하십시오.
public class Repository: IRepository
{
private readonly IMyApi myApi;
public Repository(IMyApi myApi)
{
this.myApi = myApi;
}
public void SomeMethodThatYouWantToTest()
{
var result = this.myApi.Get();
...
}
}
다음으로 귀하의 단위 테스트는 사소한 mocking 프레임 워크를 사용하여 API에 대한 액세스를 모의하는 것입니다. 예를 들어, NSubstitute를 사용한 단위 테스트는 다음과 같이 보일 수 있습니다.
// arrange
var myApiMock = Substitute.For<IMyApi>();
var sut = new Repository(myApiMock);
var myObject = new MyObject { Foo = "bar", Bar = "baz" };
myApiMock.Get().Returns(myObject);
// act
sut.SomeMethodThatYouWantToTest();
// assert
...
웹 API 방법 (실제로는 리포지토리보다 상위 계층의 항목)은 리포지토리에서 호출하면 안됩니다. 그것은 다른 방법으로 주위에 있어야합니다 – MikeSW
내가 서비스 계층에서 호출해도, 나는 그것을 호출하는 방법에 대한 단위 테스트를 작성하는 방법을 알아야합니다 – InTheWorldOfCodingApplications
당신은 어떻게 웹 API를 호출합니까? – blank