У меня есть эта простая программа на Python (hello.py
):
name=input()
print("Hello " + name)
Так просто, нет классов, нет функций, нет ничего, просто вход и соответствующий выход.
Моя цель состоит в том, чтобы создать только test_hello.py
, тестовый файл для hello.py
. Я провожу несколько часов в Интернете, но я только нашел модульные тесты для функций или методов, но не для простой программы ввода и вывода. Любая подсказка? Большое вам спасибо заранее!
Примечание. Переполнение стека предполагает, что есть ответ: как утверждать вывод с помощью nosetest/unittest в python? Но два вопроса очень разные, в моем коде нет функций, и есть input()
. В "ответе" предлагается, что код находится внутри функции, и нет input()
.
Наконец, я придумал решение:
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()
У меня есть два теста: "Алан" должен напечатать "Hello Alan", и Джон должен напечатать "Hello John".
Спасибо, ребята, за ваши подсказки!
Я действительно предлагаю использовать классы или функции, но если вы настаиваете, вы можете попытаться использовать его в подпроцессе и захватить вывод