Рубрики
Без рубрики

TDD радостное кодирование

Почему бы вам не просто писать модульные тесты и остановить кричать? Потому что вы обнаружите, что это скучно, чтобы проверить … Теги с TDD, Python, тестированием, программированием.

Почему бы вам не просто писать модульные тесты и остановить кричать?

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

Разве это не глупо, чтобы написать тесты для кода, который не существует?

Я так подумал, но так как я смотрел демонстрацию о том, как она работает, я начал понимать, как это может помочь вам более весело во время кодирования

Шаги TDD

  1. Написать тест, чтобы сделать его
  2. Напишите код, чтобы сделать его пропуск
  3. Refactor код
  4. Повторите шаги 1,2,3, пока не сделаете его

Эта статья станет демонстрацией реализации очереди:

Первая итерация

  • Шаг 1
#tests.py
class TestQueue(unittest.TestCase):
    def test_queue(self):
        q = MyQueue()
  • Шаг 2
#queue.py
class MyQueue:
    pass
  • Шаг 3
#tests.py
class TestQueue(unittest.TestCase):
    def test_queue(self):
        q = Queue()
#queue.py
class Queue:
    pass

Вторая итерация

  • Шаг 1
#tests.py
class TestQueue(unittest.TestCase):
    def test_new_queue_is_empty(self):
        q = Queue()
        self.assertTrue(q.is_empty())
  • Шаг 2
#queue.py
class Queue:
    def is_empty(self) -> bool:
        return True

Третья итерация

  • Шаг 1
#tests.py
class TestQueue(unittest.TestCase):
    ...
    def test_queue_after_one_enqueue_not_empty(self):
        q = Queue()
        q.enqueue(3)
        self.assertFalse(q.is_empty())
  • Шаг 2
#queue.py
class Queue:
    __empty = True

    def is_empty(self) -> bool:
        return self.__empty

    def enqueue(self, element: int):
        self.__empty = False
  • Шаг 3
#tests.py
class TestQueue(unittest.TestCase):
    def setUp(self) -> None:
        self.q = Queue()

    def test_new_queue_is_empty(self):
        self.assertTrue(self.q.is_empty())

    def test_queue_after_one_enqueue_not_empty(self):
        self.q.enqueue(3)
        self.assertFalse(self.q.is_empty())

Четвертая итерация

  • Шаг 1
#tests.py
class TestQueue(unittest.TestCase):
    ...
    def test_dequeue_from_empty_queue(self):
        self.assertRaises(UnderFlowException, self.q.dequeue)
  • Шаг 2
#queue.py
class UnderFlowException(Exception):
    def __str__(self):
        return "Can't dequeue from empty queue"

class Queue:
    ...
    def dequeue(self):
        if self.is_empty():
            raise UnderFlowException()
        return -1

Пятая итерация

  • Шаг 1
#tests.py
class TestQueue(unittest.TestCase):
    ...
    def test_is_empty_after_one_enqueue_one_dequeue(self):
        self.q.enqueue(10)
        self.q.dequeue()
        self.assertTrue(self.q.is_empty())
  • Шаг 2
#queue.py
    ...
    def dequeue(self):
        if self.is_empty():
            raise UnderFlowException()
        self.__empty = True
        return -1

Шестая итерация

  • Шаг 1
#tests.py
class TestQueue(unittest.TestCase):
    ...
    def test_is_not_empty_two_enqueue_one_dequeue(self):
        self.q.enqueue(10)
        self.q.enqueue(20)
        self.q.dequeue()
        self.assertFalse(self.q.is_empty())
  • Шаг 2
#queue.py
class Queue:
    __size = 0

    def is_empty(self) -> bool:
        return self.__size == 0

    def enqueue(self, element: int):
        self.__size += 1

    def dequeue(self):
        if self.is_empty():
            raise UnderFlowException()
        self.__size -= 1
        return -1

Седьмая иетерация

  • Шаг 1
#tests.py
class TestQueue(unittest.TestCase):
    ...
    def test_dequeue_value(self):
        self.q.enqueue(10)
        self.assertEqual(self.q.dequeue(), 10)
        self.q.enqueue(20)
        self.assertEqual(self.q.dequeue(), 20)
  • Шаг 2
#queue.py
class Queue:
    __size = 0
    __element = -1

    def is_empty(self) -> bool:
        return self.__size == 0

    def enqueue(self, element: int):
        self.__size += 1
        self.__element = element

    def dequeue(self) -> int:
        if self.is_empty():
            raise UnderFlowException()
        self.__size -= 1
        return self.__element

Восьмая итерация

  • Шаг 1
#tests.py
class TestQueue(unittest.TestCase):
    ...
    def test_dequeue_value_after_two_enqueues(self):
        self.q.enqueue(10)
        self.q.enqueue(20)
        self.assertEqual(self.q.dequeue(), 10)
  • Шаг 2
#queue.py
class Queue:
    __size = 0
    __elements = []

    def is_empty(self) -> bool:
        return self.__size == 0

    def enqueue(self, element: int):
        self.__size += 1
        self.__elements.append(element)

    def dequeue(self) -> int:
        if self.is_empty():
            raise UnderFlowException()
        self.__size -= 1
        return self.__elements.pop(0)
  • Шаг 3
#queue.py
class Queue:
    __elements = []

    def is_empty(self) -> bool:
        return len(self.__elements) == 0

    def enqueue(self, element: int):
        self.__elements.append(element)

    def dequeue(self) -> int:
        if self.is_empty():
            raise UnderFlowException()
        return self.__elements.pop(0)

Оригинал: “https://dev.to/shawara/tdd-enjoy-coding-176b”