Модульное тестирование меню в ASP.NET MVC 2 - PullRequest
1 голос
/ 30 ноября 2010

Я немного прочитал о модульном тестировании и хочу начать с моего первого теста. Я использую ASP.NET MVC 2.

Мы определяем тип пользователя, получая номер персонала и сравнивая его с таблицей Roles. Если пользователь существует в этой таблице, то устанавливается свойство UserType.

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

Как будет выглядеть тест, отображающий пункты меню для каждого типа пользователя?

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Если вы написали свое заявление, по некоторым данным вы теперь будете работать с «Устаревшим кодом» (основанным на книге Майкла Фезера «Эффективная работа с унаследованным кодом» - под «Унаследованным кодом» «Перья» означает любую систему, адекватно охвачены юнит-тестами).

Как упоминает @bAN, вам придется проделать большую работу, чтобы изолировать методы, которые вы будете вызывать, используя фабричные методы , которые можно заменить на "заглушки" , используя интерфейсы или с помощью override. Без этого вы будете проводить интеграционное тестирование (как вы также будете тестировать интеграцию между различными атомами функциональности). Но соотношение методов испытаний 1: 1 к методам производства не дает достаточного охвата почти во всех случаях.

В зависимости от вашей версии Visual Studio количество инструментов тестирования может варьироваться. NUnit - это очень популярная среда тестирования: http://www.nunit.org/,, если вы не используете инструменты Visual Studio.

Чтобы пройти тестирование, вы можете:

Создайте новый проект типа Тестовый проект с именем YourProjectUnderTestName.Tests.Unit.

Вы увидите, что у тестового класса есть атрибут [TestClass], а у тестовых методов есть атрибут [TestMethod].

Вам также придется взглянуть на Assert классы и их статические методы http://msdn.microsoft.com/en-us/library/ms182530.aspx

Вы должны следовать шаблону Arrange, Act, Assert в своих тестах. Получите все, что вам нужно для запуска кода, который вы хотите протестировать изолированно, затем запустите тестируемый код, а затем используйте Asserts для проверки ожидаемого поведения.

В какой-то момент вам также понадобится узнать о методах [SetUp] / [TearDown] (в MSUnit), которые имеют атрибуты:
[ClassInitialize()], [TestInitialize()] и
[TestCleanup()] [ClassCleanup()]

ClassInitialize запускается перед началом любого теста, TestInitialize запускается перед каждым тестом в классе, TestCleanup запускается после каждого теста в классе и ClassCleanup запускается после завершения всех тестов.

Как говорит @bAN, загляните на сайт http://artofunittesting.com/ и всерьез подумайте о том, чтобы получить книгу. Это один из тех, которые я бы взял, если бы в офисе был пожар, вместе с Code Complete.

Как отметили @bAN и @Oliver Hanappi, TDD - очень хороший способ убедиться, что вы проводите "правильное" модульное тестирование и получаете хорошее покрытие.

Удачи!

1 голос
/ 30 ноября 2010

Юнит-тест - это «микроскопический» юнит-тест, поэтому вам нужно написать юнит-тест для каждого метода в классе, который вы хотите протестировать.С Visual Studio модульное тестирование довольно просто, вам просто нужно щелкнуть правой кнопкой мыши по классу и изменить генерировать модульные тесты.Он сделал для вас класс Test, и вам просто нужно написать код, который тестирует метод.

Каждый модульный тест должен проверять ТОЛЬКО метод, а не другой метод другого класса.Поэтому, если тестируемый вами метод вызывает другой, вы должны проверить CALL с помощью фиктивных объектов.

Отличная и полезная книга о модульном тестировании. Искусство юнит-тестирования

...