написать модульный тест Голанга для функции, которая ожидает нажатия клавиши для продолжения - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть функция в Golang примерно такая:

func Exit(code int) {
    ...
    ...
    ...
    keyboard.Open()
    defer keyboard.Close()
    keyboard.GetKey()
    PrintAndLogInfo("\nBye.")
    os.Exit(code)
}

Я использую следующую библиотеку для использования этой функции клавиатуры

github.com/eiannone/keyboard

Я хотел бы написать модульные тесты дляэта функция.Однако клавиатура. GetKey () ожидает нажатия клавиши.И, возможно, из-за этого, когда я запускаю свой тест, который вызывает функцию Exit, он завершается с ошибкой:

panic: функция GetKey () должна вызываться после Open () [recovered] panic: function GetKey() должен вызываться после Open ()

Нужно ли здесь что-то издеваться, чтобы исправить эту ошибку?Есть идеи?

1 Ответ

0 голосов
/ 27 декабря 2018

На самом деле ошибка function GetKey() should be called after Open() вызывается keyboard.GetKey().Кажется, GetKey() думает, что Open() никогда не вызывали.Теперь, в вашем примере, мы видим keyboard.Open() - но Open() может фактически вернуть error, который вы, кажется, игнорируете.Поэтому вам следует проверить, в чем заключается ошибка, и устранить ее в своем коде.

Однако это на самом деле не решает вашу проблему - потому что вы, вероятно, не хотите нажимать клавишу при каждом запуске модульных тестов.(особенно не в вашей среде CI).

Как вы сказали, я бы издевался над библиотекой клавиатуры.То есть: написать интерфейс, который делает то, что вам нужно, написать реализацию этого интерфейса, которая просто вызывает библиотеку keyboard, и написать фиктивную реализацию, чтобы помочь в тестировании.Этот макет может затем напрямую вернуться из GetKey() (или как вы его называете в ваш интерфейс).У более продвинутого макета может быть некоторая конфигурация, чтобы он мог возвращаться напрямую, немного спать или никогда не возвращаться.

Я создал быстрый пример того, как это будет работать, см. https://gist.github.com/jorygeerts/e887856cc15b64cb9681639cd83c4a37. Обратите внимание, что для ваших тестовВы, вероятно, также хотите ввести что-то, чтобы высмеивать os.Exit() и, возможно, также ваш PrintAndLogInfo.

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