【问题标题】:Simple unit test in Python to check input and expected output [duplicate]Python中的简单单元测试以检查输入和预期输出[重复]
【发布时间】:2018-08-31 17:04:42
【问题描述】:

我有这个简单的 Python 程序 (hello.py):

name=input()
print("Hello " + name)

就这么简单,没有类,没有函数,什么都没有,只有一个输入和相应的输出。

我的目标只是创建test_hello.py,这是hello.py 的测试文件。我花了几个小时在互联网上搜索,但我只找到了函数或方法的单元测试,而不是简单的输入和输出程序。有什么线索吗?非常感谢您!

注意:堆栈溢出提示有答案:How to assert output with nosetest/unittest in python? 但是这两个问题非常不同,我的代码中没有函数,并且有一个input()。在建议的“答案”中,代码​​在函数内部,没有input()

【问题讨论】:

  • 有具体原因吗?以及如何检查预期输出?例如,它应该返回某些内容或将输出写入文件。
  • 为此编写一个 bash 脚本可能会更好
  • 我只是不知道您将如何导入或调用它以在您的测试中运行,因为它不起作用,您必须编码 hello.py 才能在测试代码中运行,v a你可以用函数做的预测结果,但你不想使用函数,嗯

标签: python unit-testing


【解决方案1】:

最后,我想出了解决方案:

import unittest
import os
import subprocess

class TestHello(unittest.TestCase):

    def test_case1(self):
        input = "Alan"
        expected_output = "Hello Alan"
        with os.popen("echo '" + input + "' | python hello.py") as o:
            output = o.read()
        output = output.strip() # Remove leading spaces and LFs
        self.assertEqual(output, expected_output)

    def test_case2(self):
        input = "John"
        expected_output = "Hello John"
        with os.popen("echo '" + input + "' | python hello.py") as o:
            output = o.read()
        output = output.strip() # Remove leading spaces and LFs
        self.assertEqual(output, expected_output)

if __name__ == '__main__':
    unittest.main()

我有两个测试用例:“Alan”必须打印“Hello Alan”,John 必须打印“Hello John”。

谢谢大家提供线索!

【讨论】:

    【解决方案2】:

    我真的建议使用类或函数,但如果你坚持,那么你可以尝试在子进程中使用它并捕获输出

    this might help

    【讨论】:

    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 2014-10-27
    • 2017-03-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多