Я нашел правильное использование (или, по крайней мере, документацию) 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);
}
}
Смешивание этих двух не кажется хорошей идеей, см., Например, этот вопрос stackoverflow :
Теперь мои вопросы:
- Какой предпочтительный подход , или когда вы бы использовали один вместо другого?
- Подход B позволяет тестировать исключения, расширяя аннотацию @Test, как в
@Test(expected = ArithmeticException.class)
. Но как вы проверяете исключения при использовании подхода А? При использовании подхода A вы можете сгруппировать несколько классов тестов в набор тестов следующим образом:
TestSuite suite = new TestSuite("All tests");
suite.addTestSuite(DummyTestA.class);
suite.addTestSuite(DummyTestAbis.class);
Но это не может быть использовано с подходом B (поскольку каждый тестовый класс должен быть подклассом TestCase). Как правильно группировать тесты для подхода B?
Изменить: я добавил версии JUnit для обоих подходов
extends TestCase
а затем каждый тест также помечен@Test
просто чтобы запутать вещи. :)