测试 Python 依赖于硬件的代码

Testing Python code that relies on hardware

所以我有一些代码使用 gphoto2 来捕获一些图像和东西,我想测试这个的最好方法是将 gphoto2 代码包装在类似 if TESTING: then return fake data 的东西中,否则做 gphoto2 的东西。

有谁知道我将如何实现这一点,我尝试使用谷歌搜索一些东西,但我没有运气专门检测单元测试是否 运行。

我假设它会像 if unittest: 但也许有更好的方法来完全做到这一点?

编辑: 所以根据目前的评论和答案,我尝试了 unittest.mock 包,它没有像我希望的那样工作,让我解释一下。

如果我有调用捕获图像方法(方法 B)的方法 A,则保存图像和其他一些位。我已经设法模拟方法 B,以便它 return 是图像或 None,当我专门调用方法 B 时它工作正常,但是当我尝试调用方法 A 时,它不会使用方法B的模拟,它使用实际的方法B.

如何让方法 A 使用模拟方法 B?

只需在测试代码中使用模拟库即可。这样您就可以屏蔽外部 API(在您的情况下是硬件调用)和 return 可预测值。 我会推荐 flexmock https://pypi.python.org/pypi/flexmock 它超级简单。

在测试代码的开头,您将编写如下内容: flexmock(SomeObject).should_receive('some_method').and_return('some', 'values')

mock 包的存在正是出于这个原因。

它是 Python 2 的独立 pip 可安装包;它已被纳入 Python 版本 >= 3.3(如 unittest.mock)的标准库中。