У меня есть программа, которая имеет несколько функций, которые принимают значения в качестве параметров, но затем возвращаются к запросу пользователя для ввода, если эти значения не предоставлены.При тестировании этих функций я обычно просто передаю значения в функции, чтобы не иметь дело с 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
не замораживает основной поток.