Python 3.x 如何测试使用用户界面的函数

Python 3.x 如何测试使用用户界面的函数,python-3.x,user-interface,testing,tkinter,pytest,Python 3.x,User Interface,Testing,Tkinter,Pytest,我试图测试一个需要用户交互的函数。问题是我如何以编程方式实现它 下面是一个示例,要求用户在列表(main.py)中选择一个项目: 我使用pytest编写所有测试,因为我不能使用面向对象编程。实际上,代码必须由非专业开发人员维护 如您所见,我无法以这种方式测试此函数,因为它将等待用户输入(test_main.py): 我需要改变我编码的方式吗 测试这种功能是否相关 我已经多次面对这个问题(无论使用何种语言),我想知道应该如何以一种干净的方式来完成 谢谢阅读!:) 通常,用户会事先用期望值或特殊

我试图测试一个需要用户交互的函数。问题是我如何以编程方式实现它

下面是一个示例,要求用户在列表(main.py)中选择一个项目:

我使用pytest编写所有测试,因为我不能使用面向对象编程。实际上,代码必须由非专业开发人员维护

如您所见,我无法以这种方式测试此函数,因为它将等待用户输入(test_main.py):

  • 我需要改变我编码的方式吗
  • 测试这种功能是否相关
我已经多次面对这个问题(无论使用何种语言),我想知道应该如何以一种干净的方式来完成


谢谢阅读!:)

通常,用户会事先用期望值或特殊值填充用户输入,然后多次调用测试函数。您还可以使用各种工具模拟单击

在C++中,你可以做一些类似的事情:

int number_of_tests = 10;
int tests_passed = 0;
tests_passed += my_test_function_int(0);
tests_passed += my_test_function_int(-1);
...
tests_passed += my_test_function_string("foo");
tests_passed += my_test_function_string("");
tests_passed += my_test_function_string(" ");
...
return (tests_passed == number_of_tests); 
这只是一个例子(在我们公司,我们就是这样做的)。
此外,为非程序员或新人添加新测试也不是很难。

哦,是的,这的确是一个有趣的解决方案。在非面向对象编程环境中测试用户界面似乎很复杂,因为我们不能简单地填充输入(这里我需要向函数添加新参数)。但我会考虑的谢谢你的回答!
from main import ask_for_item_in_list


def test_ask_for_item_in_list():
    lst = ['Item 1', 'Item 2', 'Item 3']
    title = 'Select an item'

    # Here TRY to test if changing the default selected index works
    default_selected_idx = lst.index('Item 2')

    # Code to simualte that the user as clicked on OK ?
    # user.click_button('OK') ?
    selected_item = ask_for_item_in_list(lst, title, default_selected_idx)

    assert selected_item == 'Item 2'
int number_of_tests = 10;
int tests_passed = 0;
tests_passed += my_test_function_int(0);
tests_passed += my_test_function_int(-1);
...
tests_passed += my_test_function_string("foo");
tests_passed += my_test_function_string("");
tests_passed += my_test_function_string(" ");
...
return (tests_passed == number_of_tests);