Ошибка в PyTest, если TKinter пытается показать элемент пользовательского интерфейса - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть программа, которая имеет несколько функций, которые принимают значения в качестве параметров, но затем возвращаются к запросу пользователя для ввода, если эти значения не предоставлены.При тестировании этих функций я обычно просто передаю значения в функции, чтобы не иметь дело с TKinter.Однако, если ошибка в коде приводит к тому, что диалоговое окно появляется, когда оно не должно появляться, тестирование просто останавливается в ожидании пользовательского ввода.Это делает автоматический запуск теста ненадежным.

Можно ли как-то сказать PyTest просто выдать ошибку, как только Tkinter попытается заморозить поток?

Вот пример (который я только что натолкнулся), который должен выдавать AssertionError, а вместо этого просто ждать вечно для ввода:

def sample_function(param_a=None, param_a_alias=None):
    param_a = param_a or param_a_alias

    if param_a is None:
        param_a = tk.simpledialog.askinteger(
            "Enter a value.",
            "Choose a value for param_a")

    return param_a

def test_sample_function():
    assert sample_function(param_a=0) == 0

Поскольку param_a имеет ложное значение (0), по умолчанию param_a_alias, то есть None, и затем запрашивает пользователя.Ясно, что код должен быть более конкретным, но это то, что обычно можно легко обнаружить с помощью модульного теста, если simpledialog не замораживает основной поток.

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