Я нашел правильное использование (или, по крайней мере, документации) JUnit очень запутанным. Этот вопрос служит как будущей ссылкой, так и реальным вопросом.
Если я правильно понял, есть два основных подхода для создания и запуска теста JUnit:
Подход A (стиль JUnit 3): создать класс, расширяющий TestCase, и запустить методы тестирования со словом test
. При запуске класса в качестве теста JUnit (в Eclipse) автоматически запускаются все методы, начинающиеся со слова test
.
import junit.framework.TestCase;
public class DummyTestA extends TestCase {
public void testSum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Подход B (JUnit 4-style): создайте класс "normal" и добавьте аннотацию @Test
к методу. Обратите внимание, что вам не нужно начинать метод со слова test
.
import org.junit.*;
import static org.junit.Assert.*;
public class DummyTestB {
@Test
public void Sum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Смешивание двух, кажется, не очень хорошая идея, см., например, qaru.site/info/48641/...:
Теперь, мои вопросы (вопросы):
- Какой предпочтительный подход, или когда вы используете его вместо другого?
- Подход B позволяет тестировать исключения, расширяя аннотацию @Test, как в
@Test(expected = ArithmeticException.class)
. Но как вы проверяете исключения при использовании подхода A? -
При использовании подхода A вы можете сгруппировать несколько тестовых классов в тестовом наборе, например:
TestSuite suite = new TestSuite("All tests");
suite.addTestSuite(DummyTestA.class);
suite.addTestSuite(DummyTestAbis.class);
Но это нельзя использовать с подходом B (так как каждый тестовый класс должен подклассифицировать TestCase). Каков подходящий способ групповых тестов для подхода B?
Изменить: я добавил версии JUnit для обоих подходов