2016-04-08 3 views
0

Я очень новичок в JUnit и Unit Testing и задаюсь вопросом насчет насмешливого ввода пользователем объекта Scanner. У меня есть следующий код, который я бы хотел проверить. Очень простой.Использование Junit для подбора пользовательского ввода для объекта Scanner

Run Код

import java.util.Scanner; 

public class MyGame{ 
    public MyGame() { 
     Scanner response = new Scanner(System.in); 

     int game; 

     System.out.println("Enter a game."); 
     System.out.println("Press 1 for Super Awesome Bros."); 
     System.out.println("Press 2 for a Random game."); 

     game = response.nextInt(); 

     if (game == 1){ 
      System.out.println("Super Awesome Bros."); 
    } 
    } 
} 

Вот мой TestCase

import org.junit.Rule; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.JUnit4; 
import org.junit.contrib.java.lang.system.StandardOutputStreamLog; 
import org.junit.contrib.java.lang.system.TextFromStandardInputStream; 
import static org.junit.Assert.assertThat; 
import static org.hamcrest.CoreMatchers.containsString; 
import static org.junit.contrib.java.lang.system.TextFromStandardInputStream.*; 

@RunWith(JUnit4.class) 
    public class Testsuite { 

     @Rule 
     public final StandardOutputStreamLog out = new StandardOutputStreamLog(); 

     @Rule 
     public final TextFromStandardInputStream in = emptyStandardInputStream(); 

    @Test 
    public void printOutput() { 
    in.provideText("1\n"); 
    new MyGame(); 
    assertThat(out.getLog(), containsString("Super Awesome Bros.")); 
    } 

} 

Так что в моем TestCase, я пытаюсь издеваться вход, чтобы быть 1, так что я могу получить ожидаемый результат. Но по какой-то причине мой код проходит независимо от результата. Я не уверен, что я делаю неправильно. Тест должен завершиться неудачно, если результат не соответствует ожидаемому. Может ли кто-то определить проблему? Опять же, я просто пытаюсь понять JUnit и Unit Testing. В основном я использую тестирование на Python. Спасибо всем, кто продвинулся вперед.

+2

Установите [IntelliJ IDEA] (https://www.jetbrains.com/idea/), щелкните правой кнопкой мыши имя теста и выберите «Отладка», после чего вы сможете отслеживать выполнение и легко узнать, почему он терпит неудачу/преуспевает. Также читайте об отладке, если вы не знаете, как это сделать: https://www.jetbrains.com/help/idea/2016.1/debugging.html – user3707125

+0

Вы имеете в виду, что тест по-прежнему зеленый, если вы меняете первую строку теста to 'in.provideText (" 2 \ n ");'? –

+0

Как вы проводите тест? –

ответ

0

Ваш тест всегда проходит, потому что вы всегда пишете строку «Нажмите 1 для Super Awesome Bros.». Поэтому проверка

assertThat(out.getLog(), containsString("Super Awesome Bros.")); 

соответствует всегда.

Кстати, вам не нужно писать @RunWith(JUnit4.class). Вы можете удалить эту строку.

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