매번 테스트 코드를 작성하다 고민했던 부분이 있었는데 현재는 이렇게 해결하고 있다.
비즈니스 로직에 의해 READY
상태의 객체가 DONE
으로 변경돼야 한다.
하지만 아래와 같이 assert문을 작성하는 것은 2% 부족하다
self.assertEqual(
MyModel.objects.filter(status="DONE").count(),
1,
)
비즈니스 로직을 잘못 작성해서 CANCEL
인 객체도 생성되고 있다면, 테스트 코드에서 에러를 잡지 못하게 된다.
assertEquals를 사용해서 아래와 같이 작성하자.
self.assertEqual(
MyModel.objects.count(),
MyModel.objects.filter(status="DONE").count(),
1,
)
MyModel 객체 전체의 수도 1개인데, DONE인 상태의 객체의 수도 1개다.
즉, DONE인 객체가 단 하나만 생성됐다는 걸 테스트 할 수 있다.
영어에서 주어가 3인칭 단수의 경우 동사 뒤에 s를 붙인다.
그래서 처음엔 왜 여러개를 검증하는데, equal 이 아니라 equals라는 단어를 채택할걸까 하는 가벼운(?) 고민을 했었다.
하지만 프로그래밍 언어도 엄연히 언어이고, 테스트 코드를 읽는 개발자 입장에서 assertEquals
는 여러 개의 값들을 검증한다의 명사로 해석하는 것이 더 합리적이지 않을까 생각해본다.