我正在为我的Asp.Net Core 2.0控制器编写单元测试。每个控制器都注入一个IUrlHelper服务,以便于创建Hateoas链接。此服务在Startup类的ConfigureServices方法中注册。这是我的Startup类的快照:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Infrastructure;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddScoped<IUrlHelper, UrlHelper>(implementationFactory =>
{
var actionContext =
implementationFactory.GetService<IActionContextAccessor>()
.ActionContext;
return new UrlHelper(actionContext);
});
}
}
样本控制器:
using Microsoft.AspNetCore.Mvc;
public class MyApiController : Controller
{
private readonly IUrlHelper _urlHelper;
public MyApiController(IUrlHelper urlHelper)
{
_urlHelper = urlHelper;
}
// At least 5 actions and each requires _urlHelper to create Hateoas links
}
我遇到困难的是我不知道如何在单元测试类中初始化UrlHelper类。
到目前为止我尝试过:
嘲笑UrlHelper
我找到this article,但我更喜欢不模拟UrlHelper服务,而是将其初始化为正在测试的真实API,因为模拟需要花费太多精力才能写出所有模拟路径。测试我的整个API的工作将是控制器数量 * 操作数量 * 每个操作的链接数。
启动TestServer
我在创建TestServer时发现了this MS article。但是,这已经是一个集成测试,我想尽可能坚持单元测试。如果没有办法避免启动我正在玩的测试服务器,那么我不知道如何从测试服务器获取UrlHelper的实例。
有没有办法在我的测试类中为测试中的API获取UrlHelper实例,最好不启动测试服务器,如果测试服务器不可避免,我如何从测试服务器获取UrlHelper实例?
答案 0 :(得分:1)