单元测试一个控制器属性,该属性取决于请求的URL参数(ASP.NET MVC)

时间:2011-03-15 23:00:48

标签: c# asp.net-mvc unit-testing asp.net-mvc-2 authentication

我基本上有一个控制器基类,它通过验证url中的标记来处理身份验证,例如:

http://example/Home/Index将是未经身份验证的

http://example/Home/Index?token=293029420932422823将通过身份验证

我想为此编写单元测试,但不确定如何去做。我有:

    [TestMethod]
    public void NonsecureConnection()
    {
        var controller = new EONSecureController();
        Assert.IsTrue(string.IsNullOrEmpty(controller.EONToken));
        Assert.IsTrue(controller.tokenMode == EONSecureController.EONTokenModeEnum.None);
    }

够容易。测试安全连接是我遇到的问题。

    [TestMethod]
    public void SecureConnection()
    {
        var controller = new EONSecureController();
        // What to put here?
        Assert.IsTrue(!string.IsNullOrEmpty(controller.EONToken));
        Assert.IsTrue(controller.tokenMode==EONSecureController.EONTokenModeEnum.Client);
    }

我尝试了各种方法,如:

controller.RequestContext.RouteData.Values[Config.RawTokenName] = "12312342123";
controller.Request = new System.Web.HttpRequest("", "http://localhost/example", "token=2342342");
controller.Request.RawUrl = "http://localhost/example?token=234234234234234";

其中没有一个因各种原因而起作用。是否有“正确”的方法来处理依赖于所请求的特定URL的控制器?

我已经看到一些暗示使用Moq的东西,但我不能完全加入点......


注意 的: 请不要建议“不要那样认证,你应该{等等等}}”的答案。这个例子是有意简化的,以便专注于这里的主要问题,即如何开发单元测试。

1 个答案:

答案 0 :(得分:4)

自行测试属性 - 而不是控制器。