2011-03-15 28 views
2

我基本上具有控制器基类,其通过在url验证令牌处理认证,例如控制器属性:单元测试依赖于所请求的URL的参数(ASP.NET MVC)

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的控制器的测试?

我已经看到了一些东西,在使用起订量暗示,但我不能完全加入点......


注意: 请不要建议答案沿线的“不要这样做认证,你应该{etc etc etc}来代替”)。这个例子是故意简化的,以保持关注主要问题,这是如何开发单元测试。

回答

4

自己测试属性 - 不是与控制器。

+0

属性只是一个专门的类,编译器可以识别并允许它进行修饰。 – 2011-03-16 00:48:09

+0

@FerrtallicA为什么它最终没有帮助? – 2011-04-18 12:19:39