Как unit test абстрактные классы
Используется инструмент создания единичных тестов в Visual Studio и, очевидно, он пытается создать экземпляры моих абстрактных классов.
Мой вопрос: должен ли я попытаться выполнить unit test способ, которым Visual Studio пытается заставить меня это сделать, или я должен создать экземпляр класса mock, или мне нужно только проверить методы, которые используют этот абстрактный класс
Спасибо.
Ответы
Ответ 1
Если есть методы этого абстрактного класса, которые стоит проверить, вы должны их протестировать. Вы всегда можете подклассифицировать абстрактный класс для теста (и назовите его как MyAbstractClassTesting) и протестировать этот новый конкретный класс.
Ответ 2
Есть две противоположные точки зрения:
- Не тестировать сам абстрактный класс, тестировать конкретные классы, унаследованные от него
- Абстрактный класс также должен быть протестирован, потому что он обеспечивает некоторую встроенную логику, разделяемую всеми унаследованными классами, поэтому вы просто проверяете базовую логику в абстрактном классе один раз
Я предпочитаю второй вариант (в настоящее время) и тестирование абстрактных классов с помощью функции RhinoMocks PartialMock, которая позволяет мне создать макет абстрактного класса.
Ответ 3
-
Просто протестируйте реализующие классы.
-
Вы всегда можете создать определенную реализацию для тестирования, которая не добавит дополнительной функциональности.
-
Слушайте тесты. Использование издевательских инструментов, которые делают магию для тестирования абстрактных классов и частных методов и т.д., Является запахом тестового кода