python - 如何在 Python 中测试命令行应用程序?

标签 python unit-testing command-line-interface python-3.6 python-unittest

我知道 Python unittest。我有一些使用它来测试 Python 子程序的经验。

现在我需要添加测试我用 Python 编写的命令行应用程序(只是一个 Python 函数)。我想在 stdin 中使用特定参数和特定输入来调用它,并在 stdout 中测试输出。

如何将命令行工具与其他unittest 测试用例集成测试?

或者用什么代替 unittest

最佳答案

您仍然可以使用标准的 unittest 格式并将整个应用程序作为标准函数进行测试。制作一个包装器,使脚本入口点成为一个简单的包装器,例如:

if __name__ == "__main__":
    sys.exit(main(sys.argv))

只要你不滥用全局变量来保持状态,你只需要测试 main() 函数。

如果你想测试你无法控制的脚本,你仍然可以使用 unittestsubprocess 编写如下测试:

def test_process(self):
    result = subprocess.run(['your_script', 'your_args', ...], capture_output=True)
    self.assertIn('expected out', result.stdout)

def test_process_failure(self):
    result = subprocess.run(['your_script', 'your_args', ...], capture_output=True)
    self.assertEqual(result.returncode, 1)

关于python - 如何在 Python 中测试命令行应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51736864/

相关文章:

python - 无法从需要搜索输入的网站抓取 div 标签内的数据

unit-testing - 未在模拟上执行 Moq 调用

python - 尝试创建应作为命令行脚本工作的自定义包时出现 ModuleNotFoundError

java - 如何从另一个方法返回方法 - 控制台命令界面

python - 给定一个长数字字符串数组,将它们按升序排序

Python-从自动开始下载的链接保存pdf

python - 链接回之前访问过的表单

java - 任务队列任务中的单元测试请求超时

python - 从 django_coverage 中排除系统路径

macos - 在cli的单个命令中将多个命令提交给sqlite3