首页 > 解决方案 > 导入调用中的模拟方法调用

问题描述

我正在为使用 Keras lib 的类编写单元测试。我的课看起来像这样:

class MyClass:

    def __init__(self):
        ...
        self.model = Sequential()
        …

    def save(self):
        …
        model_json = self.model.to_json()
        json_file.write(model_json)
        ...

因为在我的单元测试类中导入 Keras 大约需要 3 秒,所以我像这样嘲笑它们:

sys.modules['keras'] = MagicMock()
sys.modules['keras.models'] = MagicMock()
sys.modules['keras.layers'] = MagicMock()

当我运行save函数测试时,我得到model_json一个MagicMock对象而不是str. 实际上self.model.to_json()返回一个 MagicMock 对象。我尝试了许多不同的方法来self.model.to_json()返回我的字符串,但到目前为止没有任何效果。我如何才能返回我make to_json()定义MyClass的字符串?

标签: pythonunit-testingkerasmocking

解决方案


你能修补这个功能吗?

import json
class MyClass:

    def to_json():
        return json.dumps({'to_json': 'default'})

my_class = MyClass()

my_class.to_json = lambda: json.dumps({'hello': 'world'})

print(my_class.to_json())

推荐阅读