|
JavaScript에서는 callback스타일을 많이 쓰게 되는데요. 콜백같은 경우는 유닛테스트를 어떻게 만들어야 할까요? 일반적인 리턴을 가지고 있는 평션의 경우에는 assert로 기대값과 펑션의 결과값을 비교해서 만들면 되는데 콜백의 경우에는 펑션을 수행해도 결과가 리턴되지 않고 콜백에서 무엇인가를 수행하기 때문에 유닛테스트를 만들기가 어렵더군요. 이리저리 고민해 봤습니다만 전역값을 두고 해당값이 바뀌었는지를 테스트 할 수는 있으나 이렇게 할 경우 테스트하기 위해서 필요없는 전역값이 들어가는 것 같아서 그다지 좋아보이지 않습니다. 보통 테스트가 어렵다는 것은 코드의 책임이 분리되어 있지 않을수 있다고 TDD관련 책에서 배웠는데 이 관점에서 생각해보니 콜백스타일의 경우에는 보통 2가지의 책임이 하나로 섞여있는 것 같은 생각이 들었습니다. Ajax를 예로 들어보면 서버에서 비동기로 어떤 값을 가져오는 책임과 가져온 값으로 어떤 것을 수행하는 2가지 책임이 하나에 섞여있다고 생각하는데요. 일반적인 페이지를 위한 JS코딩에서는 문제가 되지 않지만 공통라이브러리나 모듈을 만들때는 테스트도 만들기 어렵고 재사용도 쉽지 않은 문제가 있지 않을까 합니다. 좋은 해결책이나 접근 방법이 있을까요? |
|
제가 생각하는 해결책은 콜백 function 있죠?? 그 function 만 따로 unittest 를 돌리는 겁니다.. 보통 jquery 기반으로 코딩하거나 그렇지 않은 경우에도 anonymous function 으로 바로 정의해서 콜백 등록을 하는데.. TDD 라거나 OOP 개념적으로 봐도 anonymous function 보다는 해당 클래스에 handler function 같은것을 정의해서 연결해주면 말씀하신 하나의 함수의 책임이 2가지가 있는 경우도 피할 수 있고 unittest 도 요청하는 함수따로, 요청결과를 받는 함수(handler) 따로 진행할 수 있을것 같네요.. function request(){ // improvement 아하~ 그렇군요... 테스트를 좀 만들어보려다 보니 콜백이라는 생각에 사로잡혀있었군요. 감사합니다. ㅎㅎㅎ
(Jan 03 '11 at 14:41)
Outsider
|