Проверьте каждый переключатель / случай с jUnit - PullRequest
1 голос
/ 30 ноября 2011

Я пытаюсь протестировать каждый блок переключателей / регистров с помощью jUnit, но я не уверен, как каждый TestCase соответствует различным переключателям / регистрам.

В настоящее время у меня есть следующий код в MenuTest.java:

package com.cw.hospital.test;

import org.junit.Test;
import org.junit.Assert;
import com.cw.hospital.Menu;

public class MenuTest {


    Menu MainMenu;

    public MenuTest() {
        super();
        MainMenu = new Menu();
    }


    @Test
    public void Case1() {

    }

    @Test
    public void Case2() {

    } 

    @Test
    public void Case3() {

    }


}

В классе My Menu (класс im testing) есть метод main ().Внутри этого метода я читаю ввод пользователя, а затем переключаю этот ввод.

Как бы я отправил различные данные из класса Test в Меню?

Ответы [ 3 ]

0 голосов
/ 30 ноября 2011

Легче тестировать вещи, если вы разделяете такие вещи, как ввод-вывод и потребление ресурсов. Под этим я подразумеваю, что где-то есть вещи ввода / вывода (возможно, у вас в главном), а затем создайте метод, который принимает входные данные в качестве параметра (возможно, String).

Затем просто вызовите метод потребления из ваших тестов JUnit со значениями параметров, которые определяют путь в операторе switch. Например:

[in the class under test]
void methodName()
{
  String theInput;
  ... perform I/O and populate "theInput"
  consume(theInput);
}

void consume(final String input)
{
  switch (someting based on input)
  {
     ...
  }
}


[in your junit]
@Test
testConditionOne()
{
  consume("force condition one");
}

@Test
testConditionTwo()
{
 consume("force condition two");
}

... etc.
0 голосов
/ 30 ноября 2011

издевательский ввод пользователя может быть сделан с помощью System.setIn ();и вы можете передать PipedInputStream, где вы передаете входные регистры, которые вы хотите проверить

public class MenuTest {

    OutputStream stdIn;
    InputStream stdOut;
    Menu MainMenu;

    public MenuTest() {
        super();

        PipedInputStream in = new PipedInputStream();
        stdIn = new PipedOutputStream(in);
        System.setIn(in);

        PipedOutputStream out = new PipedInputStream();
        stdOut = new PipedInputStream(out);
        System.setOut(out);

        MainMenu = new Menu();
    }

    //...


}

вы захотите использовать отдельный поток для передачи ввода, так как основной метод будет блокироваться, пока он не сможет что-то прочитать

аналогичная вещь может быть сделана для захвата вывода System.out

0 голосов
/ 30 ноября 2011

Создайте экземпляр класса в методе установки (с аннотацией @Before) и передайте аргументы методу main.Ключевым моментом здесь является то, что вы хотите проверить.Если вы покажете тестируемый класс, я могу обновить ответ, добавив больше подсказок.

РЕДАКТИРОВАТЬ: если вы действительно хотите провести модульное тестирование своего основного метода, вам придется высмеивать ваш класс Flight.Если метод, вызванный в классе Flight, что-то возвращает, вам нужно будет указать фиктивной среде, чтобы она возвращала что-то соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...