Хорошо. У меня есть класс, который запускает эту команду:Как издеваться над файлом .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!!!
Но я хочу также проверить свою логику, которая будет зависеть от вывода ffprobe из файла mpg (чтобы проверить, что мой метод get_duration возвращает правильный float и т. Д.), Поэтому мне нужно как-то их издеваться. Я просто не могу понять, как это сделать без фактического файла mpg внутри каталога тестов. –
@RichardKnop Просто Mock зависимости ffpeg, при необходимости создайте класс оболочки. Затем в ваших тестах проверяйте ожидаемое поведение вокруг ввода и вывода этого. –
@ RichO'Kelly yeah - вам нужно предоставить макетную версию ffmpeg, так что вам действительно не нужно иметь файл avi для проверки вашего кода. @RichardKnop Я использую библиотеку 'mock' для узла. Кажется, он работает неплохо. – lenswipe