#java #junit #junit4
Вопрос:
Я написал TestCase
, используя Runner
класс для печати результатов. Но когда я пытаюсь распечатать результаты, я получаю только первый результат, а не все сбои/результаты TestCase
.
Мой класс TestCase выглядит следующим образом:
public class Fixtures_JavaTest extends TestCase{
protected int value1, value2;
public Fixtures_JavaTest(String str) {
super(str);
}
@Override
protected void setUp() throws Exception {
value1 = 2;
value2 = 5;
}
public void testAdd() {
assertEquals(7, 8);
assertEquals(4, 8);
assertEquals(3, 8);
assertEquals(2, 2);
}
}
Мой класс бегунов выглядит следующим образом:
public class Runner_Fixtures_JavaTest {
public static void main(String[] args) {
TestCase test = new Fixtures_JavaTest("add") {
public void runTest() {
testAdd();
}
};
TestResult result = test.run();
Enumeration<TestFailure> failures = (Enumeration<TestFailure>) result.failures();
while(failures.hasMoreElements()) {
System.out.println(failures.nextElement());
}
}
}
Я получаю только приведенный ниже результат
add(Runner_Fixtures_JavaTest$1): expected:<7> but was:<8>
Почему я не получаю выходные данные для приведенных ниже assertEqual
методов?
assertEquals(4, 8);
assertEquals(3, 8);
assertEquals(2, 2);
Комментарии:
1. Что это делает ?
TestCase test = new Fixtures_JavaTest("add") { public void runTest() { testAdd(); } };
Впервые вижу это.2. перейдите по этой ссылке — — — — — > > junit.sourceforge.net/junit3.8.1/javadoc/junit/framework/…
Ответ №1:
Тесты JUnit-это быстрые тесты на отказ. Первое утверждение, которое завершится неудачно, не пройдет тест, и оно не будет продолжать выполняться. Если вы хотите проверить все утверждения, вы можете использовать параметризованный тест. Например.:
@RunWith(Parameterized.class)
public class Fixtures_JavaTest {
private int value1;
private int value2;
public Fixtures_JavaTest(int value1, int value2) {
this.value1 = value1;
this.value2 = value2;
}
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{7, 8}, {4, 8}, {3, 8}, {2, 2}
});
}
@Test
public void testAdd() {
assertEquals(value1, value2);
}
}
Примечание:
Как исходный код в вопросе, так и этот код проверяют равенство между двумя жестко заданными значениями вместо какой-либо логики из реальной реализации, поэтому их значение несколько сомнительно.
Этот пример просто показывает, как преобразовать код в вопросе в параметризованный тест, и не обрабатывает никаких логических изменений.