我正在为我的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类 .

到目前为止我尝试了什么:


Mocking UrlHelper

我找到this article,但我更喜欢不模拟UrlHelper服务,而是为正在测试的真实API初始化它,因为模拟需要花费太多精力来写出所有模拟路径 . 测试我的整个API的工作量将是控制器数量操作数量每个操作的链接数量 .

Starting a TestServer

我在创建TestServer时找到this MS article . 但是,这已经是一个集成测试,我想尽可能坚持单元测试 . 如果没有办法避免启动我正在玩的测试服务器,那么我不知道如何从测试服务器获取UrlHelper的实例 .


有没有办法在我的测试类中为测试中的API获取UrlHelper实例,最好不启动测试服务器,如果测试服务器不可避免,我如何从测试服务器获取UrlHelper实例?