Простой модульный тест в Python для проверки ввода и ожидаемого вывода

1

У меня есть эта простая программа на Python (hello.py):

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

Так просто, нет классов, нет функций, нет ничего, просто вход и соответствующий выход.

Моя цель состоит в том, чтобы создать только test_hello.py, тестовый файл для hello.py. Я провожу несколько часов в Интернете, но я только нашел модульные тесты для функций или методов, но не для простой программы ввода и вывода. Любая подсказка? Большое вам спасибо заранее!

Примечание. Переполнение стека предполагает, что есть ответ: как утверждать вывод с помощью nosetest/unittest в python? Но два вопроса очень разные, в моем коде нет функций, и есть input(). В "ответе" предлагается, что код находится внутри функции, и нет input().

  • 1
    Есть ли конкретная причина? и как бы вы проверить ожидаемый результат? Например, он должен что-то вернуть или записать вывод в файл.
  • 2
    Может быть лучше написать скрипт для этого
Показать ещё 1 комментарий
Теги:
unit-testing

2 ответа

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()

У меня есть два теста: "Алан" должен напечатать "Hello Alan", и Джон должен напечатать "Hello John".

Спасибо, ребята, за ваши подсказки!

0

Я действительно предлагаю использовать классы или функции, но если вы настаиваете, вы можете попытаться использовать его в подпроцессе и захватить вывод

это может помочь

  • 0
    Спасибо за ваш ответ. Да, я настоял Как я могу использовать его в подпроцессе и захватить вывод?
  • 0
    Эта ссылка может помочь stackoverflow.com/questions/2525263/capture-subprocess-output
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню