데이터 분석
테스트 코드와 유닛테스트
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라고 한다.
테스트를 짜면서 그때 그때 테스트해볼 수 있기 때문에, 어떤 예외 상황에서 오류가 발생하는지, 어떤 부분을 잘 처리하지 못했는지를 쉽게 확인할 수 있다는 장점이 있다.