본문 바로가기
파이썬

파이썬 유닛테스트

by python pro 2023. 2. 2.
반응형

Python에서 단위 테스트는 코드의 기능을 개별적으로 검증하는 것을 말합니다. 이를 위해 Python에서는 unittest 라이브러리를 사용할 수 있습니다.

 

사용법은 다음과 같습니다.

import unittest

class MyTestCase(unittest.TestCase):
    def test_something(self):
        self.assertEqual(True, True)

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

위 코드를 실행하면, MyTestCase 클래스 안의 test_something 메서드가 실행됩니다. 그리고 self.assertEqual(True, True)라는 구문은 True와 True가 같은지를 테스트합니다. 이 테스트는 항상 성공할 것입니다. test_add 메서드는 add 함수를 테스트하고 있습니다. 각각 3,4의 결과는 7, 0,0의 결과는 0, -1,1의 결과는 0 이라 기대하고 있습니다. 이러한 테스트는 self.assertEqual(add(3, 4), 7)와 같은 구문을 사용하여 진행됩니다. 이 구문은 add(3, 4)의 결과가 7과 같은지를 검증합니다.

 

실제로는 아래와 같은 코드를 테스트 할 수 있습니다.

import unittest

def add(x, y):
    return x + y

class MyTestCase(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(3, 4), 7)
        self.assertEqual(add(0, 0), 0)
        self.assertEqual(add(-1, 1), 0)

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

 

 

 

test_add 메서드는 add 함수를 테스트하고 있습니다. 각각 3,4의 결과는 7, 0,0의 결과는 0, -1,1의 결과는 0 이라 기대하고 있습니다. 이러한 테스트는 self.assertEqual(add(3, 4), 7)와 같은 구문을 사용하여 진행됩니다. 이 구문은 add(3, 4)의 결과가 7과 같은지를 검증합니다.

 
unittest 라이브러리는 여러 가지 assert 구문들을 제공하며, 각 구문들은 다음과 같은 용도로 사용됩니다.
  • assertEqual(a, b) : a와 b가 같은지 확인
  • assertTrue(x) : x가 참인지 확인
  • assertFalse(x) : x가 거짓인지 확인
  • assertIs(a, b) : a와 b가 같은 객체인지 확인
  • assertIsNone(x) : x가 None인지 확인
  • assertIn(a, b) : a가 b안에 있는지 확인
  • assertIsInstance(a, b) : a가 b의 인스턴스인지 확인

단위 테스트는 코드를 작성하는 동안 코드의 기능을 검증하는데 매우 중요합니다. 이를 통해 코드를 수정하거나 새로운 기능을 추가할 때 이전에 구현된 기능이 올바르게 동작하는지를 확인할 수 있습니다.

 

또한, unittest 라이브러리를 사용하면 코드를 실행할 때마다 테스트를 자동으로 수행할 수 있으며, 문제가 발생하면 즉시 알 수 있습니다. 이를 통해 코드를 유지보수하는데도 도움이 됩니다.

 

예를 들어, 아래와 같은 코드를 작성하였다고 가정합니다.

def add(x, y):
    return x - y

이렇게 작성된 코드를 테스트 하는데

class MyTestCase(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(3, 4), 7)

여기서 테스트는 실패 할 것 입니다.

AssertionError: -1 != 7
 

이렇게 발생 할 수 있기 때문에, 테스트를 하면서 코드를 수정할 수 있다.

정리하면, Python에서는 unittest 라이브러리를 사용하여 단위 테스트를 수행할 수 있으며, 이를 통해 코드의 기능을 개별적으로 검증할 수 있습니다. 이를 통해 코드를 수정하거나 새로운 기능을 추가할 때 이전에 구현된 기능이 올바르게 동작하는지를 확인하며, 코드를 유지보수하는데도 도움이 됩니다.

 

추가적으로, 테스트를 작성할 때는 올바른 코드 예시뿐만 아니라 잘못된 코드 예시도 포함시켜 테스트를 작성하는 것이 좋습니다. 이렇게 하면 예상치 못한 에러를 미리 발견하여 처리할 수 있어 코드의 안정성을 높일 수 있습니다.

 

또한, unittest 라이브러리를 사용하면 테스트 케이스를 그룹핑하고 테스트를 실행할 때 특정 그룹만 실행할 수 있는 기능도 제공합니다. 이를 통해 테스트를 작성할 때도 효율적으로 관리할 수 있습니다.

 

요약하자면, 단위 테스트는 코드를 작성하는 동안 기능을 개별적으로 검증하는 것을 말하며, Python에서는 unittest 라이브러리를 사용하여 단위 테스트를 수행할 수 있습니다. 이를 통해 코드의 기능을 검증하며, 코드를 수정하거나 새로운 기능을 추가할 때 이전에 구현된 기능이 올바르게 동작하는지를 확인할 수 있어, 코드를 유지보수하는데도 도움이 됩니다.

 

아래는 통합 예제입니다.

import unittest

def add(x, y):
    return x + y

class TestAdd(unittest.TestCase):
    def test_add_integers(self):
        result = add(1, 2)
        self.assertEqual(result, 3)

    def test_add_floats(self):
        result = add(0.1, 0.2)
        self.assertAlmostEqual(result, 0.3, delta=1e-9)

    def test_add_strings(self):
        result = add('hello', ' world')
        self.assertEqual(result, 'hello world')
        
    def test_add_lists(self):
        result = add([1, 2], [3, 4])
        self.assertEqual(result, [1, 2, 3, 4])

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

 

반응형

댓글