2012-06-28 4 views
1

Хорошо. У меня есть класс, который запускает эту команду:Как издеваться над файлом .mpg для модульных тестов?

ffmpeg_command = "ffprobe -v quiet -print_format json -show_format -show_streams %s" % self.absolute_path 

Где self.absolute_path это путь в кино, скажем, .mpg файл.

Файл, который я использую для тестирования, имеет размер 4 ГБ, и я не хочу фиксировать его внутри моего репозитория GIT.

Так я думал насмешливый этот файл и создать файл с именем:

mock.mpg 

Что бы возвращает ту же строку, как фактическое кино миль на галлон, когда подается в качестве входных данных для ffprobe команды. Это возможно?

Или какой другой подход выбрать?

Это мой класс:

class Movie(object): 

     absolute_path = None 
     info = None 

     def __init__(self, path): 
      self.absolute_path = "%s/%s" % (os.getcwd(), path) 
      if(os.path.exists(self.absolute_path) is False): 
       raise IOError("File does not exist") 

      self.info = json.loads(self.get_info()) 

    def get_info(self): 
      ffmpeg_command = "ffprobe -v quiet -print_format json -show_format -show_streams %s" % self.absolute_path 
      return subprocess.check_output(ffmpeg_command, shell=True) 

Это, как я буду блок тестирования:

class MovieTest(unittest.TestCase): 

     def test_foo(self): 
      movie = Movie("tests/test_1.mpg") # this file should be a mock file!!! 

ответ

3

Я предлагаю вам обернуть зависимость ffmpeg.

Положите вместо этого макет для этого. Во всяком случае, хорошая идея - обернуть внешние инструменты/библиотеки. Если какие-либо интерфейсы меняются, вам нужно только исправить оболочку и не каждое подключение из вашего кода и в ffmpeg. Обертка должна быть только тонкой бумагой, чтобы получить положительный эффект от легкого удаления.

1

Trust FFmpeg, чтобы сделать его работу правильно. Затем все, что вам нужно сделать в своем тесте, это проверить правильность команды для данного ввода.

+0

Но я хочу также проверить свою логику, которая будет зависеть от вывода ffprobe из файла mpg (чтобы проверить, что мой метод get_duration возвращает правильный float и т. Д.), Поэтому мне нужно как-то их издеваться. Я просто не могу понять, как это сделать без фактического файла mpg внутри каталога тестов. –

+0

@RichardKnop Просто Mock зависимости ffpeg, при необходимости создайте класс оболочки. Затем в ваших тестах проверяйте ожидаемое поведение вокруг ввода и вывода этого. –

+0

@ RichO'Kelly yeah - вам нужно предоставить макетную версию ffmpeg, так что вам действительно не нужно иметь файл avi для проверки вашего кода. @RichardKnop Я использую библиотеку 'mock' для узла. Кажется, он работает неплохо. – lenswipe

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