Как выполнить модульное тестирование переназначения переменных в Python - PullRequest
0 голосов
/ 13 сентября 2018

Основной вопрос : Каков наиболее эффективный способ модульного тестирования, был ли переменная класса (self.file_path) успешно переназначена методом, указанным в приведенном ниже классе?

class FileHandler(object):
    def __init__(self, file_path):
        self.file_path = file_path     # /original/path/file.csv

    def reassign_path(new_path):
        self.file_path = new_path      # /new/path/file.csv
        self.run_long_operation(self.file_path)

Сначала я пытался проверить, отличалась ли переменная self.file_path после запуска reassign_path(), но этот метод занимает очень много времени, чтобы закончить, и значительно замедляет тестирование.

Вторичные вопросы :Есть ли способ просто проверить, переназначает ли метод переменную класса без запуска всего метода?Есть ли лучший способ приблизиться к этому?

1 Ответ

0 голосов
/ 14 сентября 2018

Я не утверждаю, что это лучшее решение, но оно пригодно для тестирования. Это похоже на насмешку над медленной операцией, но более явное и тестирует функцию, используя ее определенный интерфейс, вместо того, чтобы делать предположения о том, что надо смоделировать в зависимости от реализации.

Вместо жесткого кодирования длинной, медленной операции, установите аргумент для reassign_path.

class FileHandler(object):
    def __init__(self, file_path):
        self.file_path = file_path

    def reassign_path(self, new_path, f=FileHandler.run_long_operation):
        self.file_path = new_path
        f(self, self.file_path)

Теперь вы можете быстро проверить reassign_path, передав другую, более быструю функцию в качестве второго аргумента:

def test_reassign_path_quickly(self):
     fh = FileHandler('/old/path')
     fh.reassign_path('/new/path', lambda *args: None)
     self.assertEquals(fh.file_path, '/new/path')
...