2013-06-13 2 views
6

Я новичок в Github. Я новичок в написании блок-тестов. Я внес свой вклад в проект, но владелец попросил меня предоставить тестовые модули, которые не работают до исправления и работают после исправления. Как я могу это сделать? Должен ли я написать их все вместе? Как только у меня будет одна копия кода (т. Е. С исправлением или без исправления). Я использую Python и импортирую unittest. Я запутался. Перед исправлением я получаю исключение, поэтому я должен использовать assertRaises() для этого. Я много читал, но не смог начать.unit testing python как tos

+1

Нет необходимости использовать 'assertRaises': тест * должен быть неудачным * для старого кода, поэтому простой' assertEqual' (или одна из других проверок) - это правильный путь. Вам нужно только использовать 'assertRaises', если вы хотите проверить, имеет ли функция правильную обработку ошибок (например, генерирует ли она правильное исключение, если указан недопустимый ввод). В общем, вы всегда утверждаете правильное поведение *. –

+0

Спасибо Флориан за то, что я понял правильное использование assertRaises() – Dominix

ответ

5

Предположим, у вас есть исправление для следующих сломанный delta функции:

неработающей версия:

def delta(a, b): 
    return a - b 

Fixed версия:

def delta(a, b): 
    return abs(a - b) 

Затем предоставить следующие TestCase. Он сломается с неисправной версией и будет работать с фиксированной версией.

import unittest 

from module_you_fixed import delta 

class TestDelta(unittest.TestCase): 
    def test_delta(self): 
     self.assertEqual(delta(9, 7), 2) 
     self.assertEqual(delta(2, 5), 3) 

if __name__ == '__main__': 
    unittest.main() 

Я предположил, что проект использует стандартную библиотеку unittest module. Вы должны использовать структуру, которую использует проект.

+0

Абсолютно отличный пример. Три приветствия. Только одно: я думал написать два таких файла, один с assertsequal() для фиксированного и один с assertRaises() для исключения (сломанный). Но я думаю, что, увидев ваш ответ, я могу просто пойти с одним файлом и просто получить assertsEqual. Теперь сломанный провалится, а затем зафиксирует, что один пройдет. Допустимо ли это, или мне нужно написать 2 файла и передать оба теста в фиксированном (с assertsEqual), а также передать сломанный (используя assertRaises)? Anyways +1 для вашего ответа. – Dominix

+0

@ Dominix, просто assertEqual один. – falsetru

+0

Когда я использую assertEqual(), и первый тест терпит неудачу, я имею в виду вызов self.assertEqual (delta (9, 7), 2), которому не удалось выполнить следующую строку. Как я могу выполнить его для каждого тестового примера и распечатать FAIL для всех, а не просто сбой для одного и выйти – Dominix