xUnit 的模拟服务

我有一个应用程序当前按设计工作,但在扩展它之前,我尝试使用 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


大话西游666
浏览 107回答 2
2回答

HUWWW

我以前见过这个。您可能在不同的命名空间中创建了一个接口。通常,当您拥有 Web 服务的版本 1 界面,然后您决定添加新功能时,就会发生这种情况。然后,您创建一个具有完全相同名称的版本 2 接口。设置断点services.AddScoped<IStoreRepository, StoreRepositoryTest>()并进行调试。检查结果并滚动到正在添加服务的底部;您将清楚地了解所添加的内容。

慕莱坞森

1)您可以尝试使用CustomWebApplicationFactory类并在ConfigureWebHost(IWebHostBuilder builder)方法中添加builder.ConfigureServices(//定义依赖项)。 2)或者,您可以定义自己的TestStartup类继承自Startup类并使用它。
打开App,查看更多内容
随时随地看视频慕课网APP