Как проверить (джунить) ввод клавиатуры в Java - PullRequest
1 голос
/ 23 августа 2010

мне нужно сделать тестовый блок для клавиатуры ввода в Java, существует ли способ сделать это легко?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 23 августа 2010

Вынести код, который читает клавиатуру, сделать его интерфейсом.Затем создайте две реализации, одну для производства, которая выполняет «настоящий» код Java для чтения с клавиатуры;второй может быть доступен из кода, в частности из вашего теста JUnit.

Используя последний, ваш тест может «напечатать» любой необходимый ввод.

Добавлено:

Это недопустимый код,Я набираю это из головы! Это также только один из способов сделать это: подход gpampara, приведенный ниже, для создания ваших собственных потоков также будет работать.Это зависит от ваших потребностей в тестировании.

Сначала создайте интерфейс

public interface Keyboard
{
    public int getInt() ;
}

Затем «реальная» реализация:

public class RealKeyboard
   implements Keyboard
{
    // I haven't done Java keyboard reading in ages, so this is
    //  likely not how to do it, but you should get the idea
    private BufferedReader __r ;

    public RealKeyboard( BufferedReader r )
    {
         __r = r ;
    }

    public int getInt()
    {
         // whatever you need to do with __r
    }
}

Тогда вот одна из возможных реализаций теста:

public class TestKeyboard
   implements Keyboard
{
    private int __value ;

    public TestKeyboard( int value )
    {
        __value = value ;
    }

    public int getInt()
    {
        return __value ;
    }
}

Это, конечно, всегда будет возвращать одно и то же значение, что, вероятно, не то, что вы хотите.Вы можете сделать реализацию с помощью метода setInt (), чтобы ваш тестовый класс мог установить значение во время теста, или вы могли бы передать список значений конструктору и возвращать каждое из них по порядку.Зависит от того, что вам нужно проверить.

Тогда ваш код вызова просто передается одному из них:

public class SomeConsumer
{
    private Keyboard __k ;

    public SomeConsumer( Keyboard k )
    { 
          __k = k ;
    }

    // use it in your methods...
}

Вы можете использовать Spring для его внедрения или просто жестко закодировать его в своем«производственный» код.Но в ваших тестах вы можете пройти одну из ваших тестовых реализаций.

0 голосов
/ 24 августа 2010

Аналогично другим ответам, но я думаю, что ваша абстракция должна основываться на Stream.

Видя, что ввод с клавиатуры также является потоком, вы можете довольно легко его смоделировать, предоставив поток ByteArray [Input | Output] (или что-то подобное) в модульном тесте.

0 голосов
/ 23 августа 2010

Напишите ваши классы, чтобы отделить фактический ввод с клавиатуры от обработки ввода с клавиатуры, а затем протестируйте два отдельно.

Что касается самого ввода с клавиатуры, добавьте НИКАКУЮ функциональность за пределы чтения ключей - таким образом, он будет работать или не работать ... Вы также можете смоделировать классы, снабжающие вас клавишами, и иметь свои поддельные классы подайте «известные» ключи к тестируемым классам.

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