카테고리 없음

TIL. AI 팀프로젝트(3) test code

barryjung 2023. 5. 24. 22:04

[오늘 한일]

  • 프로젝트 진행

 

오늘은 유저기능 테스트 코드를 작성했다.

챗GPT API활용법을 확인하고 예제 파일을 만들었다.

 

 

[오늘 배운점]

장고,DRF

<테스트 코드 작성 몇가지 포인트>

오늘 유저기능 테스트 코드를 작성하며 배운 포인트들이다.

 

- 테스트의 준비뿐만 아니라, 테스트 본문의 간결성을 위해서도 set up을 잘 사용하면 좋다.

set up부분에 데이터들을 미리 선언해놓는 것이다.

이때, 아예 상위클래스를 정의해주며 set up을 분리시켜주면 더 좋다.

하위 클래스에서 일괄적으로 setup을 가져갈수 있다.

 

- set up과 set up test data를 분리하는 것도 좋다.

어떤게 setup이고 어떤게 data인지 구분할수 있다.

이때 classmethod 데코레이터를 사용했는데, 이에 대해서는 확실히 익힌 다음 정리해야겠다.

 

- 만약 회원가입기능을 테스트도 하고 싶고,

테스트용 회원데이터도 만들고 싶다면, object생성을 이용할수도 있다.

이러면 데이터를 비교적 간단하게 만들수 있다.

(데이터 생성에 복잡한 로직이 있다면 더 유용하다.)

(article테스트 중에 이미지 파일저장 테스트가 그런 예다.)

(이미지 파일 없이 article을 일단 생성할수 있었다.) 

 

- self.client.post등 요청으로 받게되는 response는

status코드 속성과 data속성을 보통 갖는다.

둘다 view에서 설정해놓은대로 출력하게되지만,

출력값을 한번 찍어보고싶을땐

self.assertEqual(response.data, " ")로 테스트를 돌려보면,

response.data가 어떤 모습인지 보여준다.

이 방법을 쓰면 test code를 작성하기 용이하다.

 

- 위처럼, 테스트 결과로 status코드, response data를 검출해서 테스트 완성도를 더 높였다.

데이터의 조정(생성이나 변경)의 경우 db의 변화까지 검출해봤다.

 

- 테스트 코드자체로 문서가 될수 있도록, 어떤 테스트들이 있는지 개괄을 작성했다.

그리고 모든 url과 그에 연결된 view의 모든 메소드들이 빠짐없이 작성하는게 좋겠다.

예외 케이스의 경우, 늘리자면 끝이없다.

적당한 선으로 작성하는게 좋겠다.

이런걸 한번에 포괄하는 커버리지라는 개념이 있다고 한다.

나중에 배우게되면 좋겠다.

 

- 테스트 코드에서는 url을 reverse("url명") 이런 스타일로 보통 불러온다.

이때 url내 인자가 있다면 어떻게 해야할까.

우선 url name은 그대로 url name을 적어주면서

reverse("sign_id", kwargs={'user_id':self.user.id})

이런식으로 url내 인자를 실어준다.

kwargs는 가변인자중 한종류로 이번주에 배운 개념이다.

모듈에서 이런걸 많이 볼수있는데,

어떤 키워드의 인자든지 키워드와 값의 형태로 입력받아서 그대로 넘기겠다는 뜻이다.

저대로 url name으로 view를 잘 찾아가서 인자를 넘기게 된다.

 

- 반면 url에 표현되는 쿼리는 어떻게 처리할수 있을까.

article/?page=1&filter=trending 예컨대 우리는 이런 url을 사용한다.

?뒤부터는 쿼리문을 작성해주는 부분이고,

쿼리 인자가 여러개라면 ?가아니라 &로 나열해준다. (이것도 이번에 하면서 배우게 되었다)

쿼리는 view에 입력받는 인자가 아니라서 kwargs에 넘기면 안된다.

reverse("article") + "?page=1"

이런식으로 불러온 url뒤에 적어서 처리할수 있다.

 

※반대로 url내 인자도 +로 붙이는건, 왜 그런지 잘 되지 않는다.

 

 

결론, 유저기능 테스트를 꽤나 상세히 만들었다.

이번에 작성해보면서 테스트코드 작성을 확실히 익힌것 같다.

이제 포스트맨이나 다른 걸 안보고도 빠르게 작성할수 있다.