티스토리 뷰

반응형

파이썬에서 테스트 주도 개발(TDD)을 적용하기 위해 unittest 단위 테스트 프레임워크를 사용해 보자.

 

 

 

# 테스트 케이스

단위 테스트의 기본은 unittest.TestCase를 상속한 테스트 케이스 클래스가 된다. 이를 테스트 케이스라고 한다. 테스트 케이스는 각 테스트 메서드에 동일하게 필요한 준비(setUp)와 그와 관련된 정리 동작(tearDown)을 정의한 텍스트 픽스처를 가질 수 있다.

 

테스트 케이스는 특정 테스트 코드를 수행하는 이름이 test로 시작하는 테스트 메서드를 가진다. 그리고 테스트 메서드는 1개 이상의 assert 메서드를 가져야 한다. 테스트가 실패한다면 그 이유를 설명한 메시지가 포함된 예외가 발생한다.

 

다음은 테스트 케이스를 설명하기 위한 간단한 예제 코드가 된다.

import unittest


class TestCaseClass(unittest.TestCase):
    def __init__(self, methodName="runTest"):
        super().__init__(methodName)
        print("__init__")

    def setUp(self):
        print("setUp")

    def tearDown(self):
        print("tearDown")

    def test_method1(self):
        print("test_method1")

    def test_method2(self):
        print("test_method2")

    @classmethod
    def setUpClass(cls):
        print("setUpClass")

    @classmethod
    def tearDownClass(cls):
        print("tearDownClass")

 

예제 코드를 실행하면 다음과 같은 결과가 나온다.

__init__
__init__
setUpClass
setUp
test_method1
tearDown
.setUp
test_method2
tearDown
.tearDownClass

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

 

위의 실행결과에서 .은 테스트 메서드가 잘 종료되었음을 나타낸다.

 

## __init__()

__init__()는 보통 테스트 케이스에서 작성하지 않는다. 위의 예제에서는 테스트 케이스가 실행될 때 어떻게 인스턴스를 생성하는지 알아보기 위해서 추가한 것이다.

 

TestCaseClass는 test_method1()과 test_method2()라는 2개의 테스트 메서드를 가지고 있다. 테스트 케이스가 실행되면 테스트 메서드의 수만큼 인스턴스가 생성된다. 그래서 __init__가 2번 출력된다. 이것은 각 인스턴스는 하나의 테스트 메서드를 담당한다고 말할 수 있다. 그리고 각 인스턴스의 테스트 메서드를 setUp() -> 테스트 메서드() -> tearDown() 순으로 실행한다.

 

테스트 메서드의 실행 순서는 내장된 문자열의 정렬 순서를 기준으로 실행된다. 그래서 TestCaseClass의 테스트 메서드의 실행 순서는 test_method1 -> test_method2가 된다.

 

## setUp()

각 테스트 메서드에 필요한 준비 동작을 setUp()을 통해서 적용할 수 있다. 테스트 메서드가 실행될 때마다 자동으로 setUp() 메서드가 매번 호출된다. 

 

## tearDown()

tearDown()은 각 테스트 메서드가 종료될 때, 자동으로 매번 실행되는 메서드가 된다. tearDown()은 테스트 메서드의 성공 여부와 상관없이 실행된다.

 

## setUpClass()

setUpClass()는 테스트 메서드들이 실행되기 전에 1번 호출되는 클래스 메서드이다. setUpClass()는 클래스만 인자로 받아 호출되고, classmethod로 데코레이트해야 한다.

 

## tearDownClass()

tearDownClass()는 테스트 메서드들이 다 실행되고 난 뒤에 1회 호출되는 클래스 메서드이다. tearDownClass()도 클래스만 인자로 받아 호출되고, classmethod로 데코레이트해야 한다.

반응형
댓글
공지사항