首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在UrlHelper Core2.0中实例化控制器单元测试的UrlHelper

如何在UrlHelper Core2.0中实例化控制器单元测试的UrlHelper
EN

Stack Overflow用户
提问于 2018-05-12 15:37:00
回答 1查看 1.4K关注 0票数 2

我正在为我的Asp.Net Core2.0控制器编写单元测试。每个控制器都注入一个IUrlHelper服务,以方便创建Hateoas链接。此服务已在启动类的ConfigureServices方法中注册。这里是我的Startup类的快照:

代码语言:javascript
复制
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);
        });
    }
}

样本主计长:

代码语言:javascript
复制
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

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

启动TestServer

我在创建一个这篇MS文章时找到了TestServer。然而,这将是一个集成测试,我想坚持单元测试尽可能长。如果没有办法避免启动测试服务器(我目前正在使用它),那么我不知道如何从测试服务器获得UrlHelper的实例。

是否有任何方法可以在我的测试类中获得被测试API的UrlHelper实例,最好不启动测试服务器,如果测试服务器不可避免,我如何从测试服务器获取UrlHelper实例?

EN

回答 1

Stack Overflow用户

发布于 2019-03-04 10:15:26

  1. 您不需要在构造函数中注入UrlHelper。ControllerBase.Url已经包含了UrlHelper。
  2. 将您的仇恨构建器解压到独立的类中,这些类接受IUrlHelper,这将降低控制器操作的复杂性,并使单元测试更容易。
  3. 创建一个存根IUrlHelper,用于单元测试您的孵化器建设者。存根很容易。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50307933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档