규도자 개발 블로그

파이썬의 유닛테스트를 한번에 파악할 수 있는 코드 본문

Python/Python

파이썬의 유닛테스트를 한번에 파악할 수 있는 코드

규도자 (gyudoza) 2022. 5. 17. 19:51

파이썬의 유닛테스트를 한번에 파악할 수 있는 코드

# unittest_example.py

import unittest


def add(a, b):
    return a + b


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


def mul(a, b):
    return a * b


def div(a, b):
    return a / b


class DummyTest(unittest.TestCase):
    def test_add(self):
        c = add(10, 20)
        self.assertEqual(c, 30)

    def test_sub(self):
        c = sub(20, 10)
        self.assertEqual(c, 10)

    def test_mul(self):
        c = mul(10, 10)
        self.assertEqual(c, 100)

    def test_div(self):
        c = div(10, 2)
        self.assertEqual(c, 5.0)

    # assert types
    def test_assert_equal(self):
        # a == b
        a = 10
        b = 10
        self.assertEqual(a, b)

    def test_assert_not_equal(self):
        # a != b
        a = 10
        b = 9
        self.assertNotEqual(a, b)

    def test_assert_true(self):
        # True only
        self.assertTrue(True)

    def test_assert_false(self):
        # False only
        self.assertFalse(False)

    def test_assert_is(self):
        # a is b
        a = []
        self.assertIs(a, a)

    def test_assert_is_not(self):
        # a is not b
        a = [1]
        b = [1]
        self.assertIsNot(a, b)

    def test_assert_is_none(self):
        # a is None
        a = None
        self.assertIsNone(a)

    def test_assert_is_not_none(self):
        # a is not None
        a = [1]
        self.assertIsNotNone(a)

    def test_assert_in(self):
        # a in b
        a = 1
        b = [1, 2, 3]
        self.assertIn(a, b)

    def test_assert_not_in(self):
        # a not in b
        a = 4
        b = [1, 2, 3]
        self.assertNotIn(a, b)

    def test_assert_is_instance(self):
        # isinstance(a, b)
        a = [1, 2, 3]
        b = list
        self.assertIsInstance(a, b)

    def test_assert_not_is_instance(self):
        # not isinstance(a, b)
        a = [1, 2, 3]
        b = tuple
        self.assertNotIsInstance(a, b)

를 작성해보았다. 이번에 사내에서 새로 진행하는 프로젝트의 뼈대부터 만들게 되었는데 TDD를 적용하기 위해 백엔드에서 진행해볼 수 있는 unittest부터 api test, db test까지 접목하여 진행해볼 예정이다. 그 과정 중에 unittest class가 지원하는 assert함수의 종류를 한눈에 파악하고 필요한 걸 갖다 쓸 수 있게 예제를 제작해놓은 것이다.

 

사실 고민이 이것을 적용하는 데 있어서 코드를 쓰는 건 문제가 되지 않는데 아직 TDD를 통한 개발프로세스라는 게 머릿속에 명쾌하게 그려지는 게 없어서 이런 저런 사례들을 보고는 있는데 아직까지도 프로세는 명확하게 딱 이거다 할만큼 와닿는 게 없다. 그래서 일단은 기존의 상식대로 기능이 필요하면 Test에 함수를 작성해서 테스트하고 차차 그것을 적용한 enpoint를 제작하고 그 endpoint를 api test하는 시나리오를 짜는 식으로 진행해볼 예정이며 이 과정을 적용하는 데 있어서 부딪혔던 장애물들을 차차 기록하고 개선해나가는 방식으로 진행해야겟다.

 

Comments