好的。我有運行此命令類:如何模擬單元測試的.mpg文件?
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!!!
但我希望能夠測試我的邏輯,這將取決於mpg文件的ffprobe輸出(以測試我的方法get_duration返回正確的浮點數等),所以我需要以某種方式模擬它。如果沒有測試目錄中的實際mpg文件,我無法確定如何做到這一點。 –
@RichardKnop簡單地模仿ffpeg依賴,如果需要的話創建一個包裝類。然後在你的測試中驗證圍繞輸入和輸出的預期行爲。 –
@ RichO'Kelly是的 - 你需要能夠提供一個ffmpeg的模擬版本,這樣你實際上不需要有一個avi文件來測試你的代碼。 @RichardKnop我爲節點使用'mock'庫。它似乎工作得很好。 – lenswipe