본문 바로가기

개발일지/TIL

TIL 23-05-26 머신러닝 팀 프로젝트 - 테스트 코드

https://github.com/sdoram/B8_ChangeART/commit/365b4f8b726a84d177aaba447f377e71db37d0d6

 

✅:Test: 회원가입,로그인,이메일 인증 테스트 #1 #8 · sdoram/B8_ChangeART@365b4f8

users/tests.py : 이메일 인증 테스트 코드 작성

github.com

https://github.com/sdoram/B8_ChangeART/commit/8a91a0dfea7535039299c4e5054c40c71d3d1b83

 

:recycle:Refact: users/tests 비교대상 변경 #6 · sdoram/B8_ChangeART@8a91a0d

users/tests.py : assertEqual 대상 메시지로 변경, un_follow 테스트 추가

github.com

1.머신러닝 팀 프로젝트 - 테스트 코드(이메일 인증)

 문제점

postman에서 실제 이메일을 사용하여 이메일 인증을 할 수 있지만, test_code에서 실제 이메일을 넣어야하는지 알지 못함

 시도해 본 것들

검색 결과 test.py에서 실행되는 것은 실제로 이메일이 발송되지는 않고, shell에서 테스트하는 것 처럼 code 자체에 문제가 없는지만 테스트 해준다. 

@classmethod로 바뀌지 않을 값을 설정하기 

class SignupViewTest(APITestCase):
    @classmethod
    def setUpTestData(cls):
        cls.email = {"email": "signup@test.com"}
        cls.url = reverse("athnt_code_create_view")

 

 setUp으로 필요한 사전과정 진행 

    def setUp(self):
        self.response = self.client.post(self.url, self.email)
        self.verify = Verify.objects.get(email=self.email["email"])

self가 필요해서 setUpTestData 대신 setUp 실행 

verify를 통해서 이메일과 인증코드를 가지고 있는 모델을 불러온다.

 

인증 코드에 athnt_code를 넣어 회원가입 하기 

def test_signup(self):
        url = reverse("signup_view")
        user_data = {
            "email": "signup@test.com",
            "nickname": "테스트",
            "password": "1234",
            "verify_code": self.verify.athnt_code,
        }
        response = self.client.post(url, user_data)
        self.assertEqual(response.data["message"], "가입완료!")

 

 해결 방법

class SignupViewTest(APITestCase):
    @classmethod
    def setUpTestData(cls):
        cls.email = {"email": "signup@test.com"}
        cls.url = reverse("athnt_code_create_view")

    def setUp(self):
        self.response = self.client.post(self.url, self.email)
        self.verify = Verify.objects.get(email=self.email["email"])

    def test_signup(self):
        url = reverse("signup_view")
        user_data = {
            "email": "signup@test.com",
            "nickname": "테스트",
            "password": "1234",
            "verify_code": self.verify.athnt_code,
        }
        response = self.client.post(url, user_data)
        self.assertEqual(response.data["message"], "가입완료!")

 알게 된 점

특수한 상황이 아닌 일반적인 상황에서는 검색을 하면 대부분 방법을 찾을 수 있다.

필요에 따라 코드를 처음부터 만드는 과정이 재밌고, 기억에도 확실히 잘 남는다. 

 

 

2.머신러닝 팀 프로젝트 - for문 실전 사용 

 문제점

테스트 코드를 실험하는 도중 같은 코드를 두 번 사용해야하는 일이 발생 

 시도해 본 것들

    def test_un_follow_user(self):
        for _ in range(2):
            response = self.client.post(
                path=reverse("follow_view", args=[self.to_user.id]),
                HTTP_AUTHORIZATION=f"Bearer {self.from_user_access_token}",
            )
        self.assertEqual(response.data["message"], "팔로우를 취소했습니다")

 

 알게 된 점

 알고리즘에서만 써보며 익히던 for문을 실제로 필요해서 처음 사용해본 것 같아서 기쁘다.

 

3.faker 패키지 import

 문제점

faker를 import했지만 찾지 못하는 이슈 발생 

해결 방법

python 파일의 이름을 faker.py로 만들어서 패키지의 파일을 인식하지 못하는 문제였다. 

알게 된 점

처음 연습하는 패키지를 시도할 때 파일명을 패키지와 비슷하게 만들지 말자