장고 count 유닛 테스트 팁

hyuckhoon.ko·2023년 9월 11일
0

TIL

목록 보기
67/69

매번 테스트 코드를 작성하다 고민했던 부분이 있었는데 현재는 이렇게 해결하고 있다.

상황

비즈니스 로직에 의해 READY 상태의 객체가 DONE으로 변경돼야 한다.

하지만 아래와 같이 assert문을 작성하는 것은 2% 부족하다

self.assertEqual(
    MyModel.objects.filter(status="DONE").count(),
    1,
 )

왜 2% 부족할까

비즈니스 로직을 잘못 작성해서 CANCEL인 객체도 생성되고 있다면, 테스트 코드에서 에러를 잡지 못하게 된다.

assertEqual 대신 assertEquals

assertEquals를 사용해서 아래와 같이 작성하자.

self.assertEqual(
	MyModel.objects.count(),
    MyModel.objects.filter(status="DONE").count(),
    1,
 )

MyModel 객체 전체의 수도 1개인데, DONE인 상태의 객체의 수도 1개다.
즉, DONE인 객체가 단 하나만 생성됐다는 걸 테스트 할 수 있다.

s에 대해서

영어에서 주어가 3인칭 단수의 경우 동사 뒤에 s를 붙인다.
그래서 처음엔 왜 여러개를 검증하는데, equal 이 아니라 equals라는 단어를 채택할걸까 하는 가벼운(?) 고민을 했었다.

하지만 프로그래밍 언어도 엄연히 언어이고, 테스트 코드를 읽는 개발자 입장에서 assertEquals여러 개의 값들을 검증한다의 명사로 해석하는 것이 더 합리적이지 않을까 생각해본다.

0개의 댓글

관련 채용 정보