Я вважаю правильне використання (або принаймні документацію) JUnit дуже заплутаним. Це питання слугує як подальшим посиланням, так і реальним питанням.
Якщо я правильно зрозумів, є два основні підходи до створення та запуску тесту JUnit:
Підхід до A (JUnit 3-style): створити клас, який розширює 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щоб просто заплутати речі. :)