导入调用中的模拟方法调用

时间:2019-01-09 18:29:17

标签: python unit-testing keras mocking

我正在为使用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_jsonMagicMock对象而不是str。实际上self.model.to_json()返回一个MagicMock对象。我尝试了许多不同的方法来使self.model.to_json()返回我的字符串,但到目前为止没有任何效果。 make to_json()中的MyClass函数如何返回我定义的字符串?

1 个答案:

答案 0 :(得分:1)

您可以修补此功能吗?

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())