Пробный вызов метода при вызове импорта - PullRequest
0 голосов
/ 09 января 2019

Я пишу юнит-тест для класса, который использует 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 вернуть строку, определенную мной?

1 Ответ

0 голосов
/ 10 января 2019

Вы можете исправить функцию?

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