TDD

Test Driven Development

1

2

3

2

3

1

Добавяме тест за несъществуващ код

import unittest                                      #test.py

class Test(unittest.TestCase):

    def test_str(self):
        self.assertEqual(to_digits(123456), [1,2,3,4,5,6])

if __name__ == '__main__':
    unittest.main()
$ python3 test.py 
E
======================================================================
ERROR: test_str (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test.py", line 6, in test_str
    self.assertEqual(to_digits(123456), [1,2,3,4,5,6])
NameError: name 'to_digits' is not defined

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)

3

def to_digits(digits):
    result = []

    for n in str(digits):
        result.append(int(n))

    return result

2

Пишем код, колкото теста да мине

$ python3 test.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
def to_digits(digits):
    return [int(x) for x in str(digits)]

Refactoring

$ python3 test.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

3

import unittest
from implementation import to_digits

class Test(unittest.TestCase):

    def test_str(self):
        self.assertEqual(to_digits(123456), [1,2,3,4,5,6])
        self.assertEqual(to_digits(999), [9, 9, 9])

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

Относно refactoring-a

3

  • НЕ променяме функционалността
  • премахваме повторенията
  • подобряваме кода/дизайна
  • пускаме теста при всяка промяна

Повтаряме стъпките отново и отново, докато сглобим цялата функционалност !

Какви са ползите от практикуването на TDD?

  • интерфейс на кода
  • дизайн
  • кода ни е тестваем (имаме тест за всеки метод)
  • намалява нуждата от debugging почти напълно, понеже работим на малки стъпки
  • запазва scope-a на функциоността

Python 101-2018 TDD

By Hack Bulgaria

Python 101-2018 TDD

  • 942