我想在单元测试中使用命令行参数测试python二进制"main.py"。此二进制文件的用法如下。
main.py --input_file=input.txt --output_file=out.txt
在设计单元测试时,我认为最好像测试类或方法一样测试每个组件。
但是,在某些情况下,例如上述情况,我想对整个python二进制文件进行端到端测试,尤其是当它已经由其他人创建时。在上面的情况下,我想确定"main.py"是否正确生成"out.txt"。
一种选择是使用 subprocess.check_call 并将其创建到临时目录,然后加载它并将其与黄金(预期输出(进行比较。
这是一个好方法吗?
或者,如果有更好的方法,你能告诉我吗?
这称为黑盒测试,因为测试人员不知道程序的内部结构。如果你坚持测试模块而不了解里面发生了什么,你可以(如你提到的(使用exec
或subprocess
来检查输出的有效性。但更合乎逻辑的方法是使用unittest
库并尝试使用它提供的 API 测试代码。
如果要在单元测试中测试参数的处理,只需查看 main.py 内部,看看它如何处理参数。
例如,您可能有一个测试用例,该用例设置sys.argv
然后调用 main:
import sys
import myapp.main
sys.argv = '''main.py --input_file=input.txt --output_file=out.txt'''.split()
myapp.main.main()
# I have no idea what test you want to run.