【发布时间】:2018-05-12 15:37:00
【问题描述】:
我正在为我的 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 时发现了 this MS article。但是,这已经是一个集成测试,我想尽可能长时间地坚持单元测试。如果无法避免启动我目前正在使用的测试服务器,那么我不知道如何从测试服务器获取 UrlHelper 的实例。
有没有办法在我的测试类中为被测 API 获取 UrlHelper 的实例,最好不启动测试服务器,如果测试服务器是不可避免的,我如何从测试服务器获取 UrlHelper 实例?
【问题讨论】:
-
不!!。您可以模拟
IUrlHelper以进行独立的单元测试,或者在与测试服务器的集成测试中构建整个对象图。
标签: c# unit-testing asp.net-core-2.0