테스트를 작성할 때, 우리는 주로 예상된 결과와 비교하여 테스트를 수행합니다. 그러나 때로는 우리가 예상한대로 테스트가 실패하길 원하는 경우가 있을 수도 있습니다. 이럴 때 Unittest 프레임워크에서는 예상된 실패를 처리하는 방법을 제공합니다. 이 기능을 사용하여 코드의 특정 부분이 제대로 동작하는지 확인할 수 있습니다.
어떻게 작동하는지 이해하기
예상된 실패를 처리하려면 unittest.TestCase
를 상속받는 테스트 케이스 클래스 안에서 특정 메소드를 재정의해야 합니다. 예상된 실패를 처리하기 위한 메소드로는 assertRaises
와 assertWarns
가 있습니다.
assertRaises
assertRaises
메소드를 사용하면 특정 예외가 발생하는지 확인할 수 있습니다. 이 메소드는 2개의 인자를 받습니다. 첫 번째 인자는 예외 클래스이고, 두 번째 인자는 예외가 발생할 코드 블록이나 함수입니다.
아래는 ValueError
가 발생하는지 확인하는 예제입니다.
import unittest
def divide(x, y):
if y == 0:
raise ValueError("Cannot divide by zero")
return x / y
class DivideTestCase(unittest.TestCase):
def test_divide_by_zero(self):
self.assertRaises(ValueError, divide, 10, 0)
if __name__ == "__main__":
unittest.main()
test_divide_by_zero
테스트 메소드에서 assertRaises
를 사용하여 ValueError
를 예상하고, divide
함수를 호출할 때 0으로 나누는 경우를 확인합니다.
assertWarns
assertWarns
메소드를 사용하면 특정 경고가 발생하는지 확인할 수 있습니다. 이 메소드는 경고 클래스와 경고가 발생하는 코드 블록 또는 함수를 인자로 받습니다.
아래는 DeprecationWarning
경고가 발생하는지 확인하는 예제입니다.
import unittest
def deprecated_func():
import warnings
warnings.warn("This function is deprecated", DeprecationWarning)
class DeprecatedTestCase(unittest.TestCase):
def test_deprecated_warning(self):
self.assertWarns(DeprecationWarning, deprecated_func)
if __name__ == "__main__":
unittest.main()
test_deprecated_warning
테스트 메소드에서 assertWarns
를 사용하여 DeprecationWarning
을 예상하고, deprecated_func
함수를 호출할 때 경고가 발생하는지 확인합니다.
예상된 실패 메시지 확인하기
예상된 실패를 처리하여도 테스트가 실패한 경우, 우리는 실패 메시지를 출력하여 문제를 진단할 수 있습니다. 이러한 실패 메시지는 assertRaises
나 assertWarns
메소드에 msg
인자로 추가할 수 있습니다.
import unittest
def custom_exception_func():
raise Exception("Custom exception message")
class CustomTestCase(unittest.TestCase):
def test_custom_exception(self):
with self.assertRaises(Exception, msg="Expected exception"):
custom_exception_func()
if __name__ == "__main__":
unittest.main()
test_custom_exception
테스트 메소드에서 assertRaises
를 사용했고, msg
인자로 “Expected exception”이라는 메시지를 지정했습니다. 이 메시지는 예상된 실패가 발생한 경우에 출력됩니다.
결론
Unittest 프레임워크에서 제공하는 assertRaises
와 assertWarns
메소드를 사용하면 예상된 실패를 처리하는 테스트 케이스를 작성할 수 있습니다. 이를 통해 특정 예외나 경고가 발생하는지 확인하고, 문제의 원인을 신속하게 진단할 수 있습니다.