Что нужно проверить в junit для метода, который просто вызывает super.method ()? - PullRequest
0 голосов
/ 21 марта 2019

У меня есть метод junit , который вызывает только super.method().
Что следует утверждать в junit для этого метода.

public String foo()
{
   return super.foo();
}

Утверждает, что super.foo() вызывается достаточно.
Или я тоже должен сравнить значения.

Ответы [ 3 ]

2 голосов
/ 21 марта 2019

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

Если вы хотите отдать предпочтение изолированным тестам, то я бы сказал, что тестировать здесь нечего. Вместо этого я бы гарантировал, что super.foo() был хорошо протестирован в тестовом классе для суперкласса. Преимущество этого подхода означает, что при изменении поведения суперкласса модульные тесты требуют обновления только в одном месте.

Однако, если для такого поведения есть веская деловая причина, то имеет смысл проверить и эту реализацию здесь. Тщательное повторное использование кода в модульных тестах сведет к минимуму головную боль при обслуживании.

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

1 голос
/ 21 марта 2019

Если вызов метода super - единственное, что делает этот метод, вам не нужно создавать метод в первую очередь.Каким бы ни был этот класс, он наследует все методы суперкласса, то есть вы можете вызывать foo(), не переопределяя его.

Если это не единственное, что вы делаете, вы можете утверждать то же, что вы утверждаете в тесте junitза супер метод.

1 голос
/ 21 марта 2019

Не тестируйте реализацию : тестируйте поведение .то есть, когда вы вызываете метод foo(), он делает то, что должен делать?

Если вызов super.foo() не является частью контракта подкласса foo()метод, который почти пахнет кодом, но есть тестовые среды, которые могут определенно утверждать, вызваны ли определенные методы.Спок - мой любимый (не уверен в синтаксисе, потому что мне никогда не приходилось утверждать, что вызовы супер ... еще больше доказательств, хотя и случайных, запаха кода. Если ваш метод вызывает только super.foo(), удалите его и разрешите иерархию типовсделай это для тебя.

...