Unit Test

Woo Hwukjun·2021년 1월 1일
0

시스템 테스트 방법 3가지 (Testing Pyramid)

  1. End to End test(UI test)-cypress (10%)
  • 장점: 사용자랑 동일하게 사용하면 확인할수있다.
  • 단점: UI Testing이 가장 어렵고 까다롭습니다. 비용. 자동화지만 UI Testing실행하기 까다롭다.
  1. Integrating test - Postman, httpie (20%)
  • 장점: 프런트와 독립적이다.
  • 단점: 최소 두개이상의 클래스 또는 서브 시스템의 결합을 테스트하는 방법
  1. Unit Test (70%)
  • 이처럼 유닛 테스트는 빠르고 비용이 싸므로 개발할 때 필수적으로 작성해야 합니다.
  • 내가 작성한 코드의 가장 작은 단위인 함수를 테스트하는 메소드
  • 유닛 테스트는 사람이 스크립트로 한꺼번에 자동으로 실행하기 때문입니다.
  • 실행 속도가 매우 빠릅니다.
  • 새로운 기능을 구현할때 유닛 테스트를 잘 작성해놓으면 중장기적으로 유지 보수가 쉬운 장점이 있습니다. 이전에 통과했던 테스트 집합을 가지고 버그를 찾기 위해서 이전에 테스트 되었던 유닛테스트를 반복하는것을 regression 테스트라고 하는데 유닛테스만 반복하면 되기 때문에 regression 테스트도 반복적으로 수행 할 수 있습니다.
    장고를 테스트할때 우리는 결국 각각의 함수를 직접호출하는것이아니고 설정한 엔드포인트 경로를 통해 함수를 호출해야합니다.
    위에 Client() 객체는 request나 http와 비슷하게 작동 클라이언트로서 동작합니다.
    테스트 케이스를 만들때 항상 TestCase()객체를 상속받아 클래스를 생성한다.
    함수명은 항상 test_ 시작해야지 안그러면 인식하지않습니다.
def add (x,y):
	returnx+y

unittest

from django.test import TestCase, Client
import unittest
import app.name.py

client = Clinet()
class calTest(unittest.TestCase):
	def test_add(self):
    		result = calc.add(10,5)
    		self.assertEqual(result, 15)
 
if __name__ == '__main__':
	unittest.main()

example of unittest

from django.test import TestCase
from myapp.models import Animal

class AnimalTestCase(TestCase):
    def setUp(self):
        Animal.objects.create(name="lion", sound="roar")
        Animal.objects.create(name="cat", sound="meow")

    def test_animals_can_speak(self):
        """Animals that can speak are correctly identified"""
        lion = Animal.objects.get(name="lion")
        cat = Animal.objects.get(name="cat")
        self.assertEqual(lion.speak(), 'The lion says "roar"')
        self.assertEqual(cat.speak(), 'The cat says "meow"')

  • "테스트는 버그가 있음을 보여줄 뿐, 버그가 보여줄수는 없다." - 에츠허르 비버 데이크스트라
profile
미래 개발자

0개의 댓글