- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个定义如下的集成测试类。当我在 ApiControllerIT 中运行测试时,所有测试都成功运行。 FoundationControllerIT 也是如此。但是,当我同时运行两者时(通过运行封闭文件夹),测试失败。
错误信息是:
Scheduler with name 'DefaultQuartzScheduler' already exists.
我的 Startup.cs 文件中有这个定义:
services.AddSingleton (IHostedService, QuartzHostedService);
很明显这一行导致了问题(如果我删除这一行,所有测试一起运行正常)。所以我的问题是——我是 Java 的新手……所以我对 .NET Core Integ 测试框架没有很好的了解,但我的理解是——TestServer 是为每个测试类创建的,例如一个 TestServer 用于 ApiControllerIT,另一个用于 FoundationControllerIT。这是不正确的吗?我只是很沮丧,我怎么会收到消息:
Scheduler with name 'DefaultQuartzScheduler' already exists.
当我运行两个单独的测试类时??为什么 TestServer 会互相干扰?
public class ApiControllerIT : IClassFixture<WebApplicationFactory<Startup>>
{
private readonly WebApplicationFactory<Startup> _factory;
public ApiControllerIT(WebApplicationFactory<Startup> factory)
{
_factory = factory;
}
// tests ...
}
public class FoundationControllerIT : IClassFixture<WebApplicationFactory<Startup>>
{
private readonly WebApplicationFactory<Startup> _factory;
public FoundationControllerIT(WebApplicationFactory<Startup> factory)
{
_factory = factory;
}
// tests ...
}
最佳答案
我可能有点晚了,但我也遇到了这个问题,将来它可能对其他人有用。
问题来了,因为 WebApplicationFactory 将创建您的 Startup
的两个实例类(class)。这与您的正常服务启动截然不同,您只有一个 Startup
的实例。 .
(在您的情况下可能会有所不同,但我在整个应用程序中使用 Singleton 实例来创建和管理我的调度程序。)
WebApplicationFactory 还调用 ConfigureServices
和 Configure
在他们两个上。所以即使是你的单例也会出现两次,每个人一个Startup
实例。这不是问题,因为 Startup
实例将有自己的 ServiceProvider。如果(多个)单例实例访问某些东西的相同静态属性,它只会出现问题。在我们的例子中,这是 SchedulerBuilder
使用 SchedulerFactory
使用 SchedulerRepository在 Quartz 中,它是一个>真正的<单例并使用此代码:
/// <summary>
/// Gets the singleton instance.
/// </summary>
/// <value>The instance.</value>
public static SchedulerRepository Instance { get; } = new SchedulerRepository();
这意味着您的独立单例类仍然使用相同的 SchedulerRepository
在 Quartz 中,这解释了为什么会出现异常。
根据您在测试中测试的内容,您可以选择一些方法来解决此问题。
SchedulerRepository
有一个查找方法,您可以使用它来检查调度程序是否已由另一个实例创建:public virtual Task<IScheduler?> Lookup(string schedName, CancellationToken cancellationToken = default)
- 所以你要么只使用现有的调度器,要么生成另一个具有不同名称的调度器我无法告诉您什么对您的情况最有意义,因为这完全取决于您的应用程序做什么以及您想要测试什么,但我可能会坚持使用选项 1 的一种变体。
关于asp.net-core - ASP.NET Core 集成测试中的 WebApplicationFactory 和 TestServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60467545/
我正在为 .NET Core 3.1 Web API 进行集成测试。我关注了这篇文章Painless Integration Testing with ASP.NET Core Web API .这是
我正在尝试用 MockMessageFormatter 替换 IMessageFormatter 的实现进行测试。 public class MyMockingWebApplicationFactor
我已经配置了一个 xUnit 项目来测试 Identity Server 的实现。我创建了一个 TestStartup继承 Startup 的类并覆盖我的 Identity Server 实现以进行测
有谁知道是否可以在同一单元测试中托管WebApplicationFactory()的多个实例? 我已经尝试过并且似乎无法解决这一问题。 IE _client = WebHost.GetFactory(
我正在使用自定义 WebApplication 工厂 public class CustomWebApplicationFactory : WebApplicationFactory where TS
我正在尝试让我的集成测试针对 protected api 端点进行工作。我的测试调用 IDS 连接/ token 端点并获取有效 token 。当我用它来调用 protected api 时,我总是会
我正在尝试让我的集成测试针对 protected api 端点进行工作。我的测试调用 IDS 连接/ token 端点并获取有效 token 。当我用它来调用 protected api 时,我总是会
我的应用程序设计为独立的 aspnet core webapi 自托管可执行文件。 要启动可执行文件,必须将配置文件路径作为命令行参数传递(例如 MyServer.exe --config "path
我需要替换 WebApplicationFactory 中的上下文。我有 MyDbContext,我想用 SQLite 上下文替换它以进行测试。 替换部分工作正常 .ConfigureServices
我正在为我的应用编写集成测试,它使用 .net5 我使用 WebApplicationFactory 和 IHostBuilder 来设置环境。 自定义夹具 -> public class TestF
在 ASP.NET Core 6 中,默认模板将所有内容从 Sturtup.cs 移动进入 Program.cs , 并在 Program.cs 中使用顶级语句,因此没有更多(可说的)Program类
我有一个 ASP.NET Core Web 应用程序并使用 WebApplicationFactory 进行测试设置测试我的 Controller 操作。我之前使用过 RawRabbit,我很容易模拟
我正在为 ASPNetCore Web API 项目编写集成测试。在阅读它时,我遇到了两个术语,首先是 Microsoft.AspNetCore.Mvc.Testing.WebApplicationF
我正在自定义 WebApplicationFactory 以使用原始应用程序项目中的 Startup、appsettings。 目的是创建指向原始应用程序启动的集成测试。 dbcontext 的 ap
我有一个 ASP.NET Core 项目,其中包含一些简单的 Razor 页面和一个 Web API Controller 。 我正在使用 Clean Architecture作为起点。我重命名了项目
我有两个定义如下的集成测试类。当我在 ApiControllerIT 中运行测试时,所有测试都成功运行。 FoundationControllerIT 也是如此。但是,当我同时运行两者时(通过运行封闭
我有一个 ASP.NET Core 2.2 WebApi 项目,它也使用 EF Core 2.2。该项目通过集成测试进行了测试 WebApplicationFactory . 我尝试将 web api
我想使用 WebApplicationFactory 设置我的测试如详述 Integration tests in ASP.NET Core . 在我的一些测试之前,我需要使用在真正的 Startup
我是一名优秀的程序员,十分优秀!