Почему сложно провести модульное тестирование системы, которая зависит от синглтонов?

Попробуйте модуль полки, который даст вам постоянный словарь, например:

import shelve
d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }

shelf = shelve.open('shelf_file')
for key in d:
    shelf[key] = d[key]

shelf.close()

....

# reopen the shelf
shelf = shelve.open('shelf_file')
print(shelf) # => {'qwerty': [4, 5, 6], 'abc': [1, 2, 3]}
24
задан tir38 18 February 2016 в 04:38
поделиться

2 ответа

Если вы ссылаетесь на одноэлементный класс, который существует за пределами тестируемого класса, то у вас больше не будет истинного модульного теста. Вместо того, чтобы тестировать одну единицу - целевой класс - вы теперь тестируете две единицы - целевой класс и синглтон.

Существует также тот факт, что одиночные объекты имеют тенденцию иметь состояние. Чтобы модульные тесты были повторяемыми, эти изменения состояния необходимо откатить после завершения модульного теста. В качестве альтернативы, вы должны создать фиктивную версию синглтона, которая будет уничтожена после каждого теста. Либо добавляет изрядное количество накладных расходов, как в исходном коде, так и во время выполнения.

6
ответ дан 28 November 2019 в 23:51
поделиться

Этот Google Techtalk довольно неплохо описывает проблемы с одиночками и глобальным состоянием, когда дело доходит до модульного тестирования.

2
ответ дан 28 November 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: