亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

xUnit 的模擬服務

xUnit 的模擬服務

C#
大話西游666 2023-09-16 20:15:08
我有一個應用程序當前按設計工作,但在擴展它之前,我嘗試使用 xUnit 設置集成測試。目前測試在執行測試時只會使用原始服務,我不明白為什么。這是測試:using IStoreRepository = Repositories.V3.Interfaces.IStoreRepository;public class StoreTests : IClassFixture<WebApplicationFactory<Startup>> {    private readonly ITestOutputHelper _output;    private readonly WebApplicationFactory<Startup> _factory;    private readonly string _url;    public StoreTests(ITestOutputHelper output, WebApplicationFactory<Startup> factory) {        _output = output;        _factory = factory;        _url = "/api/store";    }    [Theory]    [InlineData("GET", "FAKE123")]    public async Task StoreByCode(string method, string code = null) {        // var client = _factory.CreateClient();        var client = _factory.WithWebHostBuilder(builder => {            builder.ConfigureTestServices(services => {                services.AddScoped<IStoreRepository, StoreRepositoryTest>();            });        }).CreateClient();        var request = new HttpRequestMessage(new HttpMethod(method), $"{_url}/{code}");        string readAsStringAsync;        _output.WriteLine($"Request Uri: {request.RequestUri}");        using (var response = await client.SendAsync(request)) {            response.EnsureSuccessStatusCode();            readAsStringAsync = await response.Content.ReadAsStringAsync();            if (!response.IsSuccessStatusCode) {                _output.WriteLine($"Not successful ({response.StatusCode}): {readAsStringAsync}");            }        }        var stores = JsonConvert.DeserializeObject<List<Store>>(readAsStringAsync);        Assert.True(stores.Any());    }}Repository然而,當我進行測試時,實際中的斷點StoreRepository是在 Startup.cs 中注冊的,而不是 中的斷點StoreRepositoryTest。我設置我的工廠來覆蓋依賴項,但它忽略了它。我可以做什么來糾正這個問題。作為參考,我一直在使用此來源:https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests ?view=aspnetcore-2.2
查看完整描述

2 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

我以前見過這個。您可能在不同的命名空間中創建了一個接口。

通常,當您擁有 Web 服務的版本 1 界面,然后您決定添加新功能時,就會發生這種情況。然后,您創建一個具有完全相同名稱的版本 2 接口。

設置斷點services.AddScoped<IStoreRepository, StoreRepositoryTest>()并進行調試。檢查結果并滾動到正在添加服務的底部;您將清楚地了解所添加的內容。


查看完整回答
反對 回復 2023-09-16
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

1)您可以嘗試使用CustomWebApplicationFactory類并在ConfigureWebHost(IWebHostBuilder builder)方法中添加builder.ConfigureServices(//定義依賴項)。?

2)或者,您可以定義自己的TestStartup類繼承自Startup類并使用它。


查看完整回答
反對 回復 2023-09-16
  • 2 回答
  • 0 關注
  • 147 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號