2014-02-14 4 views
2

У меня есть сценарий python под названием script.py, для этого нужен вход A и сгенерируйте вывод B.python: тестирование выходов (... не модульное тестирование?)

A -> script.py -> B 

Каждый раз, когда я добавляю новую функцию, мне нужно проверить, что программа генерирует тот же результат.

Как я могу автоматизировать этот тип тестов?

Какое название этого типа испытаний?

Существует какой-то модуль python для этого типа тестов?

+0

что-то вроде этого, 'mv B _B; python script.py A; diff B _B' – theAlse

+0

@ theAlse, да, я думаю в одном подобном ... может быть, автоматическом процессе diff. Но для того, чтобы не изобретать колесо, я искал больше мнений о практике и модулях. – JuanPablo

ответ

1

Из того, что я понимаю,
Вы хотите проверить, выполняет ли этот кусок кода (блок) то, что он должен. Это модульное тестирование.

Что вы можете сделать, это сделать тест, который дает script.py его вход (A) и получает произведенный результат. Затем вы можете просто проверить, соответствует ли результат.

class OutputTestCase(unittest.TestCase): 

    def get_output(self, input): 
     ... # You haven't mentioned how "input" is taken or how output is taken. 

    def test_script(self): 
     input = ... 
     expected = ... 

     output = self.get_output(input) 
     self.assertEqual(output, expected) 

PS: Вот так PLY проверяет его код. И я воюю с этим!

+0

спасибо, github repo из PLY https://github.com/dabeaz/ply – JuanPablo

0

Для тестирования вы можете использовать pytest. Так что вы можете сделать, это создать testing_suite.py и поставить свои тесты в ней с именем, начинающимся в test_ напр: test_B, test_C и т.д.

# testing_suite.py 
import pytest 

def test_B: 
      proc = subprocess.Popen(['python', 'script.py', 'arg1'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
      output = proc.communicate()[0] 
      if output == 'B': 
        print "testB done" # or something else depends on you 

def test_C: 
      .... 
      .... 

, то вы можете работать как:

$> py.test 

Так это должно выполните все тесты с помощью test_. Пожалуйста, проверьте pytest doc here for test discovery rules.

Смежные вопросы