【问题标题】:Unit Test Windsor Controller Factory单元测试温莎控制器工厂
【发布时间】:2013-09-26 13:15:35
【问题描述】:

我正在努力对以下代码进行单元测试。它是用于在应用程序中初始化 mvc 控制器的控制器工厂。谁能给我一些关于如何进行单元测试的指示?

public class WindsorControllerFactory : DefaultControllerFactory
{
    private readonly IKernel kernel;

    public WindsorControllerFactory(IKernel kernel)
    {
        this.kernel = kernel;
    }

    public override void ReleaseController(IController controller)
    {
        this.kernel.ReleaseComponent(controller);
    }

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        if (controllerType == null)
        {
            throw new HttpException(404, string.Format("The controller for path '{0}' could not be found.", requestContext.HttpContext.Request.Path));
        }

        return (IController)this.kernel.Resolve(controllerType);
    }
}

【问题讨论】:

  • 代码很简单,真的需要测试吗?
  • 我会说可能不会,但是我被要求尽可能提高覆盖率,所以我想我会问这个问题。
  • 3 行覆盖率的值是多少,您会立即看到它们被破坏(如果它曾经发生过)。我没有看到。专注于关键和脆弱的部分。
  • 我想得到 > 80% 的覆盖率,但是当我接近时,我发现剩下的大部分代码都是这样的。

标签: asp.net-mvc unit-testing castle-windsor


【解决方案1】:

除非你决定覆盖

IController CreateController(RequestContext requestContext, string controllerName)

您的测试变得更加复杂,因为原来的 CreateController 调用了 GetControllerType

这么说,我必须同意 Ales...但如果您真的必须...您可以使用 Moq 等模拟框架轻松对内核调用进行单元测试

假设你想要测试 ReleaseController 方法

var controller = new Mock<IController>();
var kernel= new Mock<IKernel>();
var windsorControllerFactory = new WindsorControllerFactory(kernel.Object);
windsorControllerFactory.ReleaseController(controller.Object);
kernel.Verify(m => m.ReleaseComponent(controller.Object));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多