确定。我有一个运行此命令的类:
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!!!
答案 0 :(得分:3)
我建议你包装ffmpeg依赖。
为此提供模拟。无论如何,包装外部工具/库是个好主意。 如果任何接口发生更改,您只需要修复包装器,而不是修复代码中的每个连接到ffmpeg。包装纸只需要纸张薄,即可轻松进行单元测试。
答案 1 :(得分:1)
相信ffmpeg正确地完成它的工作。然后,您在测试中所要做的就是验证命令对于给定的输入是否正确。