테스트 코드를 작성할 때, unittest
모듈은 매우 유용합니다. 하지만 때로는 테스트가 실패했을 때, 추가적인 디버그 정보를 얻기 위해 추적(traceback) 정보나 변수 값 등을 캡쳐하는 것이 필요할 수도 있습니다. 이번 포스트에서는 unittest
의 실패시 디버그 정보를 캡쳐하는 방법에 대해 살펴보겠습니다.
TestCase
클래스 사용하기
unittest
모듈은 TestCase
클래스를 사용하여 테스트 코드를 작성합니다. 이 클래스는 테스트 메서드를 정의하고, 테스트가 올바르게 동작하는지를 검사하는 기능을 제공합니다. 테스트 메서드는 test_
로 시작해야 하며, 테스트가 실패하면 AssertionError
가 발생하게 됩니다.
import unittest
class MyTest(unittest.TestCase):
def test_addition(self):
result = 2 + 2
self.assertEqual(result, 5)
위의 예제 코드에서는 test_addition
라는 테스트 메서드를 정의했습니다. 이 메서드는 2 + 2
의 결과를 5
와 비교하여 테스트를 수행합니다. 하지만 위의 테스트는 실패하게 됩니다.
실패시 디버그 정보 캡쳐하기
테스트가 실패했을 때, 추가적인 디버그 정보를 캡쳐하여 얻을 수 있습니다. 이렇게 디버그 정보를 캡쳐하면 어떤 부분에서 문제가 발생했는지 확인할 수 있으며, 문제를 해결하는 데에 도움이 됩니다.
TestCase
클래스에서는 addFailure
메서드를 사용하여 테스트의 실패 정보를 받아올 수 있습니다. 이 메서드의 첫 번째 인자로는 test
메서드의 인스턴스를 전달받습니다. 이를 통해 테스트를 수행하고 있는 테스트 메서드에 접근할 수 있습니다. 두 번째 인자로는 failure
객체를 전달받으며, 이 객체를 통해 실패 정보를 얻을 수 있습니다.
import unittest
class MyTest(unittest.TestCase):
def test_addition(self):
result = 2 + 2
self.assertEqual(result, 5)
def addFailure(self, test, failure):
# 실패 정보 캡쳐
test_method_name = test._testMethodName
error_message = failure[1].message
print(f"Test method '{test_method_name}' failed: {error_message}")
위의 예제 코드에서는 addFailure
메서드를 추가했습니다. 이 메서드를 사용하여 테스트 메서드의 실패 정보를 캡쳐하고 출력합니다. failure[1].message
를 통해 실패 메시지를 얻을 수 있으며, test._testMethodName
를 통해 실패한 테스트 메서드의 이름을 얻을 수 있습니다.
TestCase
클래스의 확장성
TestCase
클래스를 상속받아서 자신만의 테스트 클래스를 정의하고 활용할 수도 있습니다. 이를 통해 테스트의 실패 정보를 캡쳐하거나 원하는 추가 작업을 수행할 수 있습니다.
import unittest
class DebugTestCase(unittest.TestCase):
def addFailure(self, test, failure):
# 실패 정보 캡쳐
test_method_name = test._testMethodName
error_message = failure[1].message
print(f"Test method '{test_method_name}' failed: {error_message}")
위의 예제 코드에서는 DebugTestCase
라는 클래스를 정의하고, addFailure
메서드를 오버라이딩하여 실패 정보를 캡쳐합니다. 이렇게 정의한 DebugTestCase
클래스를 사용하면 테스트가 실패했을 때 원하는 추가 작업을 수행할 수 있습니다.
정리
unittest
모듈은 테스트 작성에 매우 유용한 도구입니다. 테스트가 실패했을 때, 추가적인 디버그 정보를 캡쳐하는 방법을 알아보았습니다. TestCase
클래스를 확장하거나 addFailure
메서드를 오버라이딩하여 원하는 동작을 수행할 수 있습니다. 이를 통해 문제가 발생한 부분을 신속하게 찾아 디버깅할 수 있습니다.