2016-03-07 2 views
0

Я следующий код в Java, я просто использовал JUnit, чтобы проверить простые вещи и некоторые execeptions, но как я могу проверить следующую функцию:Как я могу проверить следующий код с JUnit

public static void suma() { 
    Scanner scanner = new Scanner(System.in); 
    int primerSumando = scanner.nextInt(); 
    int segundoSumando = scanner.nextInt(); 
    System.out.print(primerSumando+segundoSumando); 
} 
+1

Возможный дубликат [JUnit test for System.out.println()] (http://stackoverflow.com/questions/1119385/junit-test-for-system-out-println) –

ответ

0

Вы можете достичь этого путем замены потока печати по умолчанию из:

private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); 

private static PrintStream outBackup; 

@BeforeClass 
public static void backupOut() { 
    outBackup = System.out; 
} 

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

@AfterClass 
public static void cleanUpStreams() { 
    System.setOut(outBackup); 
} 

@Test 
public void out() { 
    suma(); 
    assertEquals("4", outContent.toString()); 
} 

Но имейте в виду, что вы должны избегать использования System.out непосредственно. Используйте регистратор или создайте интерфейс, получающий результат операции.

-1

жёстко I/O сделает невозможным тестирование с помощью JUnit. Выборочной версией будет то, что suma() принимает входной поток и выходной поток в качестве параметров. В реальной программе вы передаете System.in и System.out. В JUnit вы можете передавать потоки String или StringBuffer, позволяя тестовому элементу управлять вводом и проверять вывод.

+0

довольно уродливый, но хорошо, Я исправляюсь :) В этом ответе вы заметили фразу «старое, плохо разработанное приложение»? –

Смежные вопросы