SSAFY11th-book-study / book-study

0 stars 0 forks source link

[5.1.2] sql문의 테스트 방법 #46

Closed sootudio closed 4 months ago

sootudio commented 4 months ago

책에서는 사용자 정보를 수정하는 update()메소드에 대해서 SQL 문장에 대한 추가적인 테스트를 보완하고 있습니다.

이번 관통 프로젝트를 하면서 컬럼 이름을 잘못 만들었다가 개발을 어느정도 진행 한 후 수정하는 바람에 여기저기 있는 sql문들을 수정하며 큰 고난을 겪었기 때문에 sql에 대한 꼼꼼한 테스트가 필요하다는 내용에 공감했습니다.

그런데, WHERE절을 빼먹었는지 확인하기 위해 사용자를 두 명 등록해두고 테스트해본다는 내용이 조금은 비효율적으로 느껴졌습니다. 책에서 제시된 다른 방법인 JdbcTemplate의 update() 리턴 값을 확인하는 방식을 사용하는 것은 다른 메소드(add나 delete 같은...)에서도 간단히 해볼 수 있을 것 같은데, WHERE절 하나의 확인을 위해 이 정도로 테스트 코드를 짜는 것은 오히려 효율적이지 않은 테스트 방법이라는 생각이 들었습니다.

다만 WHERE 절 처럼 sql문에서 빼고 사용해도 테스트 실행 시 에러 등이 나지 않는 구문에 대한 테스트는 개발자의 실수를 방지하기 위해 꼼꼼하게 해야 한다고는 생각해서, 다른 분들은 해당 구문들이나, 혹은 sql이 포함된 메소드의 테스트를 어떤 식으로 진행하는지 궁금합니다.

sootudio commented 4 months ago

생각해 보니 책에서 제시했던 첫 번째 방법인 update()의 리턴 값(수정된 row의 개수)로 확인하는 방법도 문제가 있다는 생각이 들었습니다. 예를 들어 WHERE 절을 잘못 만들었을 때, 잘못된 아이템이 update 되었지만 수정된 개수는 정상 작동할 때와 똑같이 바뀌어서 해당 값이 리턴 된다면, 개발자가 해당 테스트의 결과를 봤을 때 문제가 없다고 생각하기 때문에 통과는 하지만, 잘못된 코드를 찾아내는 것에는 실패하는 거라고 생각했는데... 다들 어떻게 생각하시는지 궁금합니다.

gmelon commented 4 months ago

생각해 보니 책에서 제시했던 첫 번째 방법인 update()의 리턴 값(수정된 row의 개수)로 확인하는 방법도 문제가 있다는 생각이 들었습니다. 예를 들어 WHERE 절을 잘못 만들었을 때, 잘못된 아이템이 update 되었지만 수정된 개수는 정상 작동할 때와 똑같이 바뀌어서 해당 값이 리턴 된다면, 개발자가 해당 테스트의 결과를 봤을 때 문제가 없다고 생각하기 때문에 통과는 하지만, 잘못된 코드를 찾아내는 것에는 실패하는 거라고 생각했는데... 다들 어떻게 생각하시는지 궁금합니다.

우선 이 경우에 대해서만 생각을 말씀드려보면, where 절이 제대로 들어가있는지 확인하기 위해 update의 반환 값이 1인지 확인하고 추가로 수정 대상 id로 db에서 조회를 해온 다음 필드들이 제대로 수정이 되었는지 확인한다면 테스트가 프로덕션 코드의 정상 동작을 확인해줄 수 있을 것이라고 생각합니다.

반례가 있을지도 모르겠네요! 의견 부탁드립니다.

sootudio commented 4 months ago

@hj-k66 답변:

hj-k66 commented 4 months ago

SQL 화이트박스 테스팅에 대한 실용적인 지침에 대한 글입니다! https://grapevine9700.tistory.com/m/424