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