如何模拟.mpg文件进行单元测试?

时间:2012-06-28 10:55:09

标签: python unit-testing ffmpeg ffprobe

确定。我有一个运行此命令的类:

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

其中self.absolute_path是电影的路径,让我们说.mpg文件。

我用于测试的文件大小为4GB,我不想在我的GIT仓库中提交它。

所以我想要嘲笑这个文件并创建一个名为:

的文件
mock.mpg

当作为ffprobe命令的输入提供时,返回与实际mpg影片相同的字符串。这可能吗?

或者我应该选择其他方法?

这是我的班级:

  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!!!

2 个答案:

答案 0 :(得分:3)

我建议你包装ffmpeg依赖

为此提供模拟。无论如何,包装外部工具/库是个好主意。 如果任何接口发生更改,您只需要修复包装器,而不是修复代码中的每个连接到ffmpeg。包装纸只需要纸张薄,即可轻松进行单元测试。

答案 1 :(得分:1)

相信ffmpeg正确地完成它的工作。然后,您在测试中所要做的就是验证命令对于给定的输入是否正确。