20. Testing

data_hamster·2023년 4월 30일
0

학습주제
투표와 테스팅

학습내용
테스트에 대해 알아본다.
기능들이 잘 동작하는지 직접 브라우저에서 손으로 입력했었다.

또는 POSTMAN에서 API 요청을 보내봤었다.
기능을 하나하나 추가할 때마다 테스트해보는건 기능이 많아질수록 매우 어려운 일. 하나의 수정에 의해서 전혀 예상하지 못한 곳에서 버그가 발생함. 그걸 막기 위해 모든걸 테스트할 수는 없음.

자동화된 테스트를 만들고 이용해야 한다.

장고: 테스트는 개발시간을 줄여줄 것이다. 문제를 발견하는 것 뿐만 아니라 예방하는 데 도움을 준다. 코드를 좀 더 매력적으로 만들어준다. 팀으로써 협업하는데 도움을 줄 것이다.

개발을 시작하는 단계에선 테스트가 귀찮고 불편한 것으로 느껴질 것. 어느정도 서비스를 운영해봐야함. 나중에 후회하는 경우가 정말 많음.
수험생이 기초공부 해놓을 껄하는 후회와 비슷.

polls_api - tests.py


from django.test import TestCase

# Create your tests here.
class QuestionSerializerTestCase(TestCase):
    def test_a(self):
        print("This is test a")
    
    def test_a(self):
        print("This is test b")
    
    def some_method(self):
        print("This is test some method")

테스트는
python manage.py test
프로젝트에 있는 테스트를 돌리게 될 것이다.

두 문장의 출력문이 나온다.
여기서 somemethod가 실행되지 않은 이유는 테스트 클래스에서 메소드 이름이 `test`로 시작하는 메소드만 자동으로 실행시켜주기 때문이다.


자세히 보면 점(.)이 2개가 찍혀있는 게 보인다. 두개의 테스트가 별 문제없이 돌아갔다는 의미.
그럼 문제가 있는 경우는 어떻게 제공할까? self.assertEuqal()을 사용해보았다.

설명. 두개의 오브젝트가 같이 않으면 fail이다. self.assertEqual(1, 2) 두개의 오브젝트로 1과 2를 부여했다. 같이 않으므로 fail을 예상한다.

..이 아닌 F.이 나왔다. testa가 AssertionError가 발생했다. 1 != 2라는 fail이 발생함.
테스트 클래스에서는 여러개의 기능 요건들에 대해서 하나 하나의 test
로 시작하는 기능들을 적어주고, assert를 통해 확인함으로써 코드가 잘 동작하는지 확인하게 된다.

이는 프로그래머스의 코딩테스트 기능으로 우리는 경험해본적 있다. 문제를 풀고, 제출 후 채점을 하면 이벤트가 실행되면서, 여러개의 테스트를 수행한다.

하지만 정답코드를 넣고 제출을 하면 테스트 케이스들이 실행되면서 케이스들을 하나 하나 통과시키는 모습을 볼 수있다.

우리가 만들려고 하는 이 test 케이스도 유사하다.

class QuestionSerializerTestCase(TestCase):
    def test_with_valid_data(self):
        serializer = QuestionSerializer(data={'question_text': 'abc'})
        self.assertEqual(serializer.is_valid(), True)
        new_question = serializer.save()
        self.assertIsNotNone(new_question.id)
    
    def test_with_invalid_data(self):
        serializer = QuestionSerializer(data={'question_text': ''})
        self.assertEqual(serializer.is_valid(), False)

넣은 데이터가 valid한지, invalid한지 판별하는 과정이 잘 이루어지는지 확인하는 메소드 2개 생성.

정상적으로 작동하는 것을 확인하였다.

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글