Не удалось выполнить тест JUnit для проверки результата system.out.println - PullRequest
1 голос
/ 27 марта 2019

У меня есть простая функция countUpDown(0, 3), которая должна напечатать некоторые результаты, подобные этому: 0,1,2,3,2,1,0

  class CountNumP2{
    public void countUpDown(int start, int end) {
            System.out.println(start);
            if (start >= end) {
                return;
            }
            countUpDown(start + 1, end);
            System.out.println(start);
        }
   }

Моя функция должна работать нормально.Однако, когда я проводил тест JUnit, он проваливался следующим образом:

import static org.junit.Assert.*;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

import org.junit.Before;
import org.junit.Test;

public class CountNumP2Test {

    private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();

    @Before
    public void setUpStreams() {
        System.setOut(new PrintStream(outContent));
    }

    @Test
    public void test() {
        CountNumP2 cn = new CountNumP2();
        cn.countUpDown(0, 1);
        String output =  0 + "\n" + 1 + "\n" + 0;
        assertEquals(output , outContent.toString());
    }

}

Я думаю, что мой тест должен пройти, кто-нибудь знает проблему?Большое вам спасибо

Ответы [ 2 ]

1 голос
/ 27 марта 2019

System.out.println добавит в строку символ перевода строки "\ n" после значения, которое вы передаете. System.out.print не добавляет символ перевода строки

Как сообщает jUnit, тест не пройден из-за того, что ожидаемая строка (та, что в тесте) не имеет перевода строки в конце, как это имеет фактическая строка (та, что из outContent).

Я не уверен, что ваш код правильный или нет, вы можете изменить использование print вместо println, но тогда следующий тест не пройдет:

@Test
public void testMoreThenOneOff() {
    CountNumP2 cn = new CountNumP2();
    cn.countUpDown(0, 2);
    String output = "0\n1\n2\n1\n0";
    assertEquals(output , outContent.toString());
}

На самом деле зависит от того, чего вы пытаетесь достичь, но установка некоторых точек останова на результат outContent.toString () должна быть полезной.

0 голосов
/ 27 марта 2019

Ожидаемая строка вывода, которую вы пытаетесь утвердить, должна быть

0 \ n1 \ n0 \ n

, поскольку существует println.

Метод исправленных юнит-тестов должен быть таким, как показано ниже.

    @Test
    public void test() {
        CountNumP2 cn = new CountNumP2();
        cn.countUpDown(0, 1);
        String output =  "0\n1\n0\n";
        Assert.assertEquals(output , outContent.toString());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...