为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信