2015-10-21 3 views
1

У меня есть две функции: один создает объект и хранит в вызове списка create(), а другой удаляет вызов из списка объектных форм delete().Python - Как выполнить модульное тестирование функций, удаляющих что-то?

Я уже написал модульный тест с использованием модуля unittest для create(). Но я не знаю, как написать модульный тест для delete().

Из-за delete() зависит от create().
Невозможно удалить объект перед его созданием.

Если я пишу модульный тест для delete(), позвонив по телефону create().
Когда тест завершился неудачно, я не знаю, какая функция приведет к сбою теста.

def create(self, clusterName): 
    import uuid 

    newClusterUuid = str(uuid.uuid4()) 
    newCluster = Cluster(uuid = newClusterUuid, name = clusterName) 
    self.clusterList[newClusterUuid] = newCluster 
    return newClusterUuid 

def delete(self, uuid): 
    try: 
     del self.clusterList[uuid] 
     return True 
    except: 
     return False 
+0

Можете ли вы поделиться своим кодом, чтобы у нас было что-то конкретное для ссылки? – Mureinik

+1

Если 'create()' не работает, модульный тест для 'create()' также должен завершиться ошибкой. Таким образом, вы исправляете 'create()', а затем, если 'delete()' все еще терпит неудачу, вы знаете, что вам нужно исправить 'delete()'. – juanchopanza

+0

@Mureinik OK! Но мой код слишком длинный, я его упрощаю. – Chengjia

ответ

2

Вы также можете попробовать использовать методы setUp и tearDown. Таким образом, вы должны установить create() в настройках, и если это не удастся, ваш тест delete() будет автоматически пропущен.

2

При тестировании у вас есть «ожидаемые отказы», ​​которые на самом деле являются доказательством того, что ваша функция работает.

Так для функции удаления, вы можете проверить все из этих сценариев:

  1. Это вызывает исключение, когда нет ничего, чтобы удалить (т.е. ничего не было создано).
  2. Если он удаляет, общее количество уменьшается.
  3. Он проверяет, что сумма, подлежащая удалению, меньше, чем общая сумма вещей.

В случае №1 вы ожидаете, что он потерпит неудачу - и если он потерпит неудачу (он вызывает исключение) - он фактически проходит тест.

Есть также способы пометить тест как expected failure; что в основном означает, что если этот тест не выполняется, то это не сбой.

+0

Спасибо, что ответили на мой вопрос. Я проектирую свой тестовый пример в соответствии с вашим предложением.И я использую методы setup и tearDown для его реализации. – Chengjia

0

Вы можете изолировать удаление и создать путем инициализации поддельного списка кластеров.

#setup 
fakeClusterList = [1,3,5,6,0] 
fakeUUID = 3 

# test delete with your delete method 

Лучше всего было бы, чтобы ввести кластер в свой метод создания (то есть передать его в качестве параметра). Таким образом, вы можете передать объект cluster, который вернет поддельный список для тестирования.

Таким образом, при подборе create с ошибкой delete было бы намного меньше вероятность того, что фактическая логика создания (которая может быть сложной) будет устранена.

Читайте также: Dependency Injection.