Не удается распечатать все результаты теста в тестовом наборе с помощью JUnit

#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);
    }
}
 

Примечание:
Как исходный код в вопросе, так и этот код проверяют равенство между двумя жестко заданными значениями вместо какой-либо логики из реальной реализации, поэтому их значение несколько сомнительно.
Этот пример просто показывает, как преобразовать код в вопросе в параметризованный тест, и не обрабатывает никаких логических изменений.