делегировать методы для юнит-тестов - PullRequest
0 голосов
/ 13 декабря 2011

Я думаю, при написании некоторых модульных тестов для приложения, чтобы встроить в мои классы интуитивно понятные методы, которые отображаются по-разному в зависимости от того, какой "класс" вызвал метод.

Итак, я нахожусь в классе NUnit, и мне нужно проверить, был ли FormsAuthenticationTicket успешно создан для аутентифицированного пользователя:

Assert.DoesNotThrow(typeof(Application.AuthenticationFailure), 
   delegate { Code.Authenticate(); }

Проблема, с которой я сталкиваюсь - HttpContext недопустим в модульных тестах. Нашел несколько решений, но понравилось то, что сделал Фил Хаак со своим HttpSimulator. Это не работает напрямую в моем коде модульного теста, так как я издеваюсь над классами EF (я не рекомендую это знать), и симулятор влияет на строки соединения.

Лучше убрать вызовы данных из модульных тестов, но я изучаю анонимные методы в процессе и хотел бы сделать что-то вроде:

delegate<Test> { AuthenticateSimulate(customer); }

Есть ли хорошая альтернатива в 3.5, чтобы сделать что-то подобное?

1 Ответ

1 голос
/ 04 января 2012

Возможно, попробуйте фальшивый объектный фреймворк, например, RhinoMocks, Moq или TypeMock Isolator, или изолирующий фреймворк, такой как Microsoft Moles.

http://research.microsoft.com/en-us/projects/moles/
«Замените любой метод .NET своим собственным делегатом!»
«Кроты - это облегченная среда для тестовых заглушек и обходов в .NET, основанная на делегатах. Кроты могут использоваться для обхода любого метода .NET, включая не виртуальные / статические методы в закрытых типах».

Редактировать
Также см .:
http://stephenwalther.com/blog/archive/2008/07/01/asp-net-mvc-tip-12-faking-the-controller-context.aspx

С Mvc, например:
http://mvccontrib.codeplex.com/wikipage?title=TestHelper&referringTitle=Documentation

...