Unit Test

finelinefe·2020년 10월 9일
0

TIL

목록 보기
1/8
post-thumbnail

유닛테스트 : 브라우저를 직접 띄워 사람이 확인하거나 httpie, 포스트맨 같은 것으로 테스트를 하는 것보다 훨씬 처리속도가 빠르며 경제적이다. 구현한 코드에 대한 사후관리와 유지보수를 위해서 필수적이다.

✔️ Testing Pyramid란?

시스템 테스트는 3가지로 나뉜다.


  • UI Testing / End-To-End Testing

    • 크롬 브라우저를 띄운다음에 내가 만든 검색페이지로 들어가서 검색을 해보고 검색한 내용이 제대로 나오는지 화면상에서 확인하거나 직접 회원가입을 해보고 회원가입후에 로그인되는지 직접 브라우저 상에서 값을 입력해서 테스트 하는방법
  • Integration Testing

    • 최소 두개이상의 클래스 또는 서브 시스템의 결합을 테스트하는 방법
      예를들면 장고로 서버를 띄우고 모델 클래스와 결합하여 데이터베이스 시스템과 연동한 테스트

      Postman 또는 httpie로 호출해서 Json response가 제대로 출력되는지 확인

  • Unit Testing

  • 이중 UI Testing이 가장 어렵고 까다로움.


Unit Test 장점

  • 유닛 테스트는 Ui Test 또는 Integration Test 보다 테스트 비용이 저렴한데 그 이유는 스크립트로 한꺼번에 자동으로 실행하기 때문이다.

  • 또한, 유닛 테스트는 다른 테스트에 비해서 실행 속도가 매우 빠르다. 그래서 유닛테스트를 활용하면 하루에도 배포를 여러번 할 수 있어 개발 및 배포 속도에 중요한 영향을 주기 때문에 개발할 때 최대한 활용하는게 좋다.

  • 새로운 기능을 구현할때 유닛 테스트를 잘 작성해놓으면 중장기적으로 유지 보수가 쉬운 장점이 있다. 즉, 이전에 통과했던 테스트 집합을 가지고 버그를 찾기 위해서 이전에 테스트 되었던 유닛테스트를 반복하는것을 regression 테스트라고 하는데 유닛테스만 반복하면 되기 때문에 regression 테스트도 반복적으로 수행 할 수 있다.

  • 유닛테스트를 잘 짜놓으면 유닛테스트가 되었던 코드에서는 버그가 거의 발견되지 않고 대부분 버그가 발견되는 경우는 유닛테스트가 없어서 발생하는 경우가 많고 만약 사후에 발견된 버그에 대해서도 버그를 수정한 후 유닛테스트를 작성해놓으면 버그를 방지할 수 있다.


Add, Substract Unit test 예제 실습

mycalc.py

def add(a, b):
    return a+b

def substract(a,b):
    return a-b

tests.py

import unittest # 유닛테스트 모듈을 불러옴
import mycalc  

# mycalctest라는 클래스를 만들어 유닛테스트 모듈의 testcase 상속
class MyCalcTest(unittest.TestCase):
    def test_add(self):
        c = mycalc.add(20, 10) # mycalc의 add를 테스트하는 테스트에드 함수생성
        self.assertEqual(c, 30)

    def test_substract(self):
        c = mycalc.substract(20, 10) # mycalc의 substract를 테스트하는 테스트에드 함수생성
        self.assertEqual(c, 11)

if __name__ == '__main__':
    unittest.main()

정상 실행결과

처리 실패 일때

import unittest # 유닛테스트 모듈을 불러옴
import mycalc  

# mycalctest라는 클래스를 만들어 유닛테스트 모듈의 testcase 상속
class MyCalcTest(unittest.TestCase):
    def test_add(self):
        c = mycalc.add(20, 10) # mycalc의 add를 테스트하는 테스트에드 함수생성
        self.assertEqual(c, 30)

    def test_substract(self):
        c = mycalc.substract(20, 10) # mycalc의 substract를 테스트하는 테스트에드 함수생성
        self.assertEqual(c, 11)

if __name__ == '__main__':
    unittest.main()

뺄셈 연산을 하는 함수(substract)에서 오류가 났다는 결론이 나온다. 즉, 20-10 = 10이어야 하는데 테스트 함수에서 11이 나왔으므로 같지 않다고(실패 = 1) 출력된 것을 볼 수 있다.

0개의 댓글