我基本上有一个控制器基类,它通过验证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的东西,但我不能完全加入点......
注意 的: 请不要建议“不要那样认证,你应该{等等等}}”的答案。这个例子是有意简化的,以便专注于这里的主要问题,即如何开发单元测试。
答案 0 :(得分:4)
自行测试属性 - 而不是控制器。