Я вважаю правильне використання (або принаймні документацію) 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
щоб просто заплутати речі. :)