我正在为我的Asp.Net Core2.0控制器编写单元测试。每个控制器都注入一个IUrlHelper服务,以方便创建Hateoas链接。此服务已在启动类的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
我找到了这篇文章,但是我不喜欢模拟UrlHelper服务,而是为被测试的真正API初始化它,因为模拟需要花费太多的精力来写出所有模拟的路径。测试我的整个API的工作将是控制器的数量*操作的数量*每个操作的链接数。
启动TestServer
我在创建一个这篇MS文章时找到了TestServer。然而,这将是一个集成测试,我想坚持单元测试尽可能长。如果没有办法避免启动测试服务器(我目前正在使用它),那么我不知道如何从测试服务器获得UrlHelper的实例。
是否有任何方法可以在我的测试类中获得被测试API的UrlHelper实例,最好不启动测试服务器,如果测试服务器不可避免,我如何从测试服务器获取UrlHelper实例?
发布于 2019-03-04 10:15:26
https://stackoverflow.com/questions/50307933
复制相似问题