데이터 분석

테스트 코드와 유닛테스트

temporubato108 2024. 8. 26. 10:30

테스트코드: 프로그램이 의도대로 작동하는지 확인하기 위한 코드

테스트코드로 알 수 있는 것

1. 코드가 설계된 대로 작동하는지

2. 코드를 수정한 후에도 동일하게 작동하는지

 

유닛테스트: 함수 1개가 잘 작동하는지 확인하기 위한 코드

유닛테스트로 확인할 것: 주어진 인자에 대해 예상된 출력값을 내놓는가?

 

def test_is_palindrome_level():
assert(is_palindrome("level") == True)

def test_is_palindrome_lever():
assert(is_palindrome("lever") == False)

# level, lever 두 단어를 사용하여 회문을 구분하는 함수 is_palindrome()가 잘 작동하는지 확인하는 유닛테스트

 

assert함수: 디버깅 모드에서 개발자가 오류가 생기면 치명적일 것이라는 곳에 심어 놓는 에러 검출용 코드. False가 되면 프로그램을 중단시키고 에러 로그를 띄워준다.

 

유닛테스트는 코드의 설계이다

def test_is_palindrome_empty():
assert(is_palindrome(""))

def test_is_palindrome_sentence():
assert(is_palindrome("Mr.Owl ate my metal worm"))

위의 유닛테스트가 True일지 False일지는 코드를 짠 사람의 설계에 따라 달라진다.

공백문자를 회문에 포함 할 것인지, 특수문자와 대소문자 등은 어떻게 할 것인지.

테스트 작성을 어떻게 하느냐에 따라 어떤 출력을 의도하는지가 결정된다.

즉, 테스트 == 설계이다.

 

코드를 만든 후, 테스트를 작성하여 코드가 잘 동작하는지 체크하기도 하지만,

반대로 테스트를 먼저 작성 후(내가 이제부터 만들 코드는 이러이러한 테스트를 통과해야 한다.) 코드를 작성하는 경우도 있다. 이 경우를 Test-Driven Development라고 한다.

테스트를 짜면서 그때 그때 테스트해볼 수 있기 때문에, 어떤 예외 상황에서 오류가 발생하는지, 어떤 부분을 잘 처리하지 못했는지를 쉽게 확인할 수 있다는 장점이 있다.