Задать вопрос
@bogushevich

Выбор уровня изоляции для каждого модуля

Здравствуйте.
Изучаю сейчас модульное тестирование и возник вопрос о правильном уровне изоляции каждого модуля.
Представим, что у нас есть два класса в JS, в целом представляющие один компонент или уровень:

function HighClass() {
   this.lowClass = new lowClass();
}
function LowClass() {
   this.db = new SomeDB.Connecton();
}


Я вижу два способа тестирования:
1. Так как оба класса логически связаны то тестировать мы их будем вместе. В качестве внешней зависимости я выбираю подключение к БД (new SomeDB.Connecton()) и заменяю ее на заглушку.
2. Я тестирую каждый каждый класс отдельно. В качестве заглушки для HighClass предоставляю MockLowClass, а для LowClass — MockDB.

Какой способ является правильным, если мы говорим именно о модульном тестировании? При модульном тестировании мы в качестве кода под тестами всегда должны выбирать один класс или можем компонент, состоящий из нескольких классов?
  • Вопрос задан
  • 2665 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
EugeneOZ
@EugeneOZ
Второй вариант. Как бонус полУчите код, более строго соблюдающий принцип единой ответственности.
Ответ написан
Комментировать
funca
@funca
правильность, как любое оценочное понятие, зависит от контекста. в вашем случае — от целей тестирования. тестирование модуля и модульное тестирование это не одно и то же. :)

с помощью модульного тестирования проверяется корректность элементов приложения в отдельности. важно, чтобы тестируемые аспекты не перекрывались (не тестировалось одно и то же разными тестами и тесты не падали, если что-то сломалось совершенно в другом месте). по логике, такое возможно лишь на уровне атомарных элементов, коими в ООП являются классы и методы. а все что выше — неизбежно будет давать корреляции, связанные с системой. например, если ломается реализация LowClass, это не должно влиять на модульные тесты HighClass — о такой поломке вам сообщат модульные тесты LowClass. поэтому правильной стратегией будет 2.

для тестирования системы «в сборе» используются интеграционные тесты. они тоже очень нужные — ведь важно не только собрать из проверенных деталей, но и правильно их соединить — здесь вы будете использовать стратегию 1.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы