Я нашел правильное использование (или, по крайней мере, документацию) 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): создайте «нормальный» класс и добавьте аннотацию @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);
}
}
Смешение двух, кажется, не очень хорошая идея, см. Например. этот вопрос переполнения стека :
Теперь мои вопросы:
- Какой предпочтительный подход , или когда вы бы использовали один вместо другого?
- Подход 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 для обоих подходов