2

行。我有一个运行这个命令的类:

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

2 回答 2

4

我建议您包装 ffmpeg 依赖项

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

于 2012-06-28T11:13:02.127 回答
2

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

于 2012-06-28T10:58:58.107 回答