У меня в основном есть базовый класс контроллера, который обрабатывает аутентификацию, проверяя токен в 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, но я не могу присоединиться к точкам ...
Примечание :
Пожалуйста, не предлагайте ответы в духе «не делайте аутентификацию подобным образом, вместо этого вы должны {etc etc etc}». Пример намеренно упрощен, чтобы сосредоточиться на главной проблеме, которая заключается в разработке модульных тестов.