Тест Junit ожидается и актуален

У меня проблема с этим, и я не знаю, как это исправить.

Это мой класс:

import java.util.Scanner;

public class ScannerAndKeyboard
{

    public static void main(String[] args)
    {   Scanner s = new Scanner(System.in);
        System.out.print( "Enter your name: "  );
        String name = s.nextLine();
        System.out.println( "Hello " + name + "!" );
    }
}

и это мой тест JUnit

public class ScannerAndKeyboardTest {

    @Rule
    public final TextFromStandardInputStream systemInMock = emptyStandardInputStream();

    @Rule
    public final SystemOutRule OutLog = new SystemOutRule().enableLog();

    @Test
    public void Name() {
      String name = "Name";
      String expectedConsoleOutput = "Enter your name: Hello Name!" + System.lineSeparator();
      systemInMock.provideLines(name);

      ScannerAndKeyboardTest.main(new String[] {});

      Assert.assertEquals(expectedConsoleOutput,OutLog.getLog());
    }

    private static void main(String[] strings) {
    }
}

вот строка № 31

Assert.assertEquals(expectedConsoleOutput,OutLog.getLog());

Может кто-нибудь сказать мне, что я делаю не так и почему этот журнал пуст? Я делаю свои первые шаги в этом

1 ответ

Проблема в том, что вы звоните неправильно main метод. замещать

ScannerAndKeyboardTest.main(new String[] {});

с

ScannerAndKeyboard.main(new String[] {});

Вы также должны удалить метод ScannerAndKeyboardTest#main потому что это не нужно и только вызывает путаницу.

Если вы измените подпись main метод для

public static void main(String... args)

тогда вам не нужно создавать пустой массив в вашем тесте и можете просто вызвать

ScannerAndKeyboard.main();
Другие вопросы по тегам