将函数从基本WebApi控制器移动到可测试服务

时间:2016-05-09 22:19:23

标签: c# asp.net-mvc asp.net-web-api

我继承了一个WebApi2应用程序,它有一个非常重的BaseController而没有使用DI而且没有任何测试。

我正在尝试创建一个服务并从基本控制器中移出一些逻辑,因为我相信这将使我的生活更容易测试应用程序并保持它向前发展。

基础

中的几个方法示例
public virtual string GetControllerName()
{
    return this.ControllerContext.ControllerDescriptor.ControllerType.Name;
}

public virtual string GetActionName()
{
    return this.ActionContext.ActionDescriptor.ActionName;
}

我依赖ControllerContext& ActionContext如果我可以将这些抽象为服务,我可以对结果进行模拟,这样我的测试就不会依赖于this.Request

有没有人对如何让我的服务工作有任何指示。到目前为止我有这个

public ApplicationService(ILog log, 
                          HttpRequestMessage httpRequestMessage)
{
    _log = log;
    _httpRequestMessage = httpRequestMessage;
}

public virtual string GetControllerName()
{
    // return this.ControllerContext.ControllerDescriptor.ControllerType.Name;
    throw new NotImplementedException();
}

public virtual string GetActionName()
{
    return _httpRequestMessage.GetActionDescriptor().ActionName;
}

传递httpRequestMessage感觉有点不对......也许这没关系....访问ControllerContext我需要通过HttpControllerContext再次感觉不对。

有没有人对我可以用于我的服务的干净方法有任何建议,这将使我能够在没有太多头痛的情况下进行测试?

0 个答案:

没有答案