0
我在我的Repository層中調用一個Web Api方法。任何人都可以建議如何使用Mocking來測試它如何單元測試Web API調用方法
我在我的Repository層中調用一個Web Api方法。任何人都可以建議如何使用Mocking來測試它如何單元測試Web API調用方法
如果你想模擬對Web API方法的調用,你將不得不抽象調用它的代碼。
所以摘要:
public interface IMyApi
{
MyObject Get();
}
,然後你可以有這個接口的具體實現,是使用HttpClient的調用實際的API:
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();
...
}
}
Next in你的單元測試使用你最喜歡的模擬框架來模擬對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
...
一個Web API方法(其實,從比庫更高一層的任何東西)不應該從庫中調用。它應該是相反的 – MikeSW
即使我從服務層調用它,我仍然需要知道如何爲調用它的方法編寫單元測試 – InTheWorldOfCodingApplications
如何調用web api? – blank