我有一個建構式,用于在建構式EdmService中創建一個物件EdmApiClient
public EdmService(IOptions<EdmApiClientOptions> apiOptions, IHttpClientFactory httpClientFactory)
{
Check.ArgumentIsNotNull(apiOptions, nameof(apiOptions));
Check.ArgumentIsNotNull(httpClientFactory, nameof(httpClientFactory));
_client = new EdmApiClient(apiOptions.Value.Hostname, httpClientFactory.CreateClient(nameof(EdmApiClient)));
}
這_client用于我要測驗的方法中。但是如何模擬呢?
uj5u.com熱心網友回復:
如果服務創建了新實體,則無法模擬它。您必須更改您的服務以通過建構式接受其所有依賴項:
public EdmService(IOptions<EdmApiClientOptions> apiOptions, IHttpClientFactory httpClientFactory, EdmApiClient client)
{
Check.ArgumentIsNotNull(apiOptions, nameof(apiOptions));
Check.ArgumentIsNotNull(httpClientFactory, nameof(httpClientFactory));
_client = client;
}
public static void Main() {
var svc = new EdmService(
apiOptions,
httpClientFactory,
new EdmApiClient(
apiOptions.Value.Hostname,
httpClientFactory.CreateClient(nameof(EdmApiClient)));
}
如果不能通過客戶端,請考慮改為通過工廠。
public EdmService(IOptions<EdmApiClientOptions> apiOptions, IHttpClientFactory httpClientFactory, Func<String, IHttpClient, EdmApiClient> clientFactory)
{
Check.ArgumentIsNotNull(apiOptions, nameof(apiOptions));
Check.ArgumentIsNotNull(httpClientFactory, nameof(httpClientFactory));
_client = client(apiOptions.Value.Hostname, httpClientFactory.CreateClient(nameof(EdmApiClient)));
}
public static void Main() {
var svc = new EdmService(
apiOptions,
httpClientFactory,
(hostname, client) => new EdmApiClient(hostname, client));
}
或者使用 real EdmApiClient,但是讓你的httpClientFactoryreturn 一個 test double。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/511488.html
標籤:C#单元测试起订量
下一篇:如何在測驗中觸發org.springframework.orm.ObjectOptimisticLockingFailureException?
