我有ASP.NET Core API。我已经阅读了文档here,该文档展示了如何在asp.net核心中进行集成测试。该示例设置测试服务器,然后调用控制器方法 但是我想直接测试一个特定的类方法(不是控制器方法)?例如:
public class MyService : IMyService
{
private readonly DbContext _dbContext;
public MyService(DbContext dbContext)
{
_dbContext = dbContext;
}
public void DoSomething()
{
//do something here
}
}
当测试开始时,我希望调用startup.cs
,以便所有依赖项都会被注册。 (比如dbcontext)但我不确定在集成测试中如何解决IMyService
?
注意:我想直接测试DoSomething()
方法的原因是因为任何控制器都不会调用此方法。我在此API中使用Hangfire
进行后台处理。 Hangfire的后台处理作业将调用DoSomething()
方法。因此,对于集成测试,我希望避免使用Hangfire并直接调用DoSomething()
方法
答案 0 :(得分:8)
运行集成测试时,您已经有TestServer
,从此处可以轻松访问应用程序范围的容器。由于显而易见的原因,您无法访问RequestServices(它仅在HttpContext中可用,每次请求创建一次)。
var testServer = new TestServer(new WebHostBuilder()
.UseStartup<Startup>()
.UseEnvironment("DevelopmentOrTestingOrWhateverElse"));
var myService = testServer.Host.Services.GetRequiredService<IMyService>();