В чем причина этого?
Думайте о каждом методе тестирования как о логическом аналоге метода public static void main(String[])
в приложении classi c Java. Должна быть хорошо известная сигнатура метода, чтобы инфраструктура JUnit могла идентифицировать тестовые методы и вызывать их стандартным способом.
Что касается заданных c проектных точек, которые вы запрашиваете:
Причина, по которой методы не могут быть абстрактными, заключается в том, что они должны вызываться. Вы не можете вызвать абстрактный метод.
Причина, по которой методы не могут возвращать значения, заключается в том, что тестовая среда не сможет сделать ничего полезного с возвращаемым значением. (Было бы невозможно отказаться от какого-либо результата, но какой смысл результата теста, который нельзя использовать?)
Я думал, что мы могли бы использовать повторно один метод испытаний внутри другого.
Если вы хотите повторно использовать код в модульных тестах, вы просто используете обычные методы и другие функции OO Java; например, базовые классы, вспомогательные классы и так далее. Есть несколько ситуаций, когда вам нужен автономный метод тестирования и как «компонент» (если не сказать лучшего слова) другого метода тестирования. И если бы вы сделали, вы могли бы написать что-то вроде этого.
public void test_xxx() {
real_test_xxx();
}
public int real_test_xxx() {
...
}
public void test_yyy() {
...
res = real_test_xxx()
...
}
Это чисто дизайнерский выбор? Это лучшая практика?
Есть нет лучших практик !
Это варианты дизайна, основанные на общих требованиях и практичность юнит-тестирования 1 . В частности, требование о том, что авторам модульных тестов НЕ нужно создавать конфигурации, чтобы сообщать тестовой среде, что делать.
Обратите внимание, что TestNG использует аналогичный подход. Если метод TestNG @Test
объявлен как возвращающий значение, он не рассматривается как метод тестирования; см Может ли метод испытания возвращают значение в TestNG
1047 * В любом случае, если вы не предлагаете реализовать еще один Java тест рамки, это все спорно. 1049 *
1 - Если бы были веские практические причины для необходимости абстрактных методов тестирования или методов тестирования, возвращающих значения, кто-то бы что-то сделал с этим. Массы (авторов модульных тестов) будут расти и свергать тиранический режим (разработчиков тестовых фреймворков). (Повторение «Мы больше не будем одурачены» от «Кто».)