2

Ok。このコマンドを実行するクラスがあります:

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 に答える