단위테스트
-
DBUnit 사용시 테스트 데이터 INSERT 문제Object & Test 2011. 10. 12. 19:20
데이터베이스와 관련된 기능의 검증을 위해 단위 테스트를 작성할 때 DbUnit을 사용하면 많은 도움을 얻을 수 있다. DbUnit을 통해 테스트 메소드 실행 전에 픽스처를 데이터베이스에 입력하고 테스트가 종료되면 삭제하는 일을 아주 편하게 할 수 있기 때문이다. 이를 통해, 테스트 메소드의 독립적인 수행을 보장하고, 테스트 데이터베이스를 항상 깨끗한 상태로 유지할 수 있다. 하지만 가끔 문제가 생기는 경우가 있는데 동일한 테이블에 넣어야 하는 테스트 데이터의 크기가 다른 경우이다. 보통 다음과 같은 경우가 되겠다. 이 경우 테스트케이스를 구동하면 column-3, column-4의 값이 누락되어 입력이 안된다. 상위에 있는 데이터셋(dataset)에 컬럼이 두 개만 설정되어 있기 때문이다. DBUnit은..
-
디버그 코드를 SVN에 체크인하지 마세요.Object & Test 2011. 7. 22. 09:29
제가 처음으로 회사에 취직해서 개발을 시작할 무렵은 EJB의 시대였습니다. EJB 스펙을 구현한 웹로직, 웹스피어, Jboss같은 웹 애플리케이션 서버가 웹앱 시장을 장악하고 있었고 EJB 코딩이가능한 자바 개발자를 찾는 구인 광고가 넘쳐났습니다. 처음 사회에 나온 어리버리한 신입사원이었던 저는 EJB아니면 엔터프라이즈웹 웨플리케이션을 작성할 수 없는 줄 알았습니다. 그렇게 몇 년을 세션빈, 엔티티 빈에 묻혀 살면서 수많은 EJB 코드를 작성했습니다. 사실 EJB 스펙에 맞게만 코딩을 하면 트랜젹션 관리, 데이터소스 관리 같은 직접 구현하기 어려운 기능을 알아서 해주는 건 상당히 매력적이긴 했습니다. 하지만 그 시절은 저에게 개발하기가 무척 어려웠던 시절로 기억됩니다. 잘 알지도 못하는 DD(Deploy..
-
단위 테스트용 테스트 데이터베이스 싱크하기Object & Test 2011. 7. 7. 19:41
데이터베이스에 대한 단위 테스트를 작성하고 실행하기 위한 전략으로 우리는 보통 로컬 컴퓨터에 테스트용 데이터베이스를 구축하고 테스트를 수행합니다. 개인 PC에서 테스트가 성공적으로 수행되면 SVN, CVS같은 소스형상관리 서버에 커밋을 하게 되고, 이를 CI(Continuous Integration) 도구가 통합하게 됩니다. CI도 통합 테스트를 수행하기 위해 테스트 데이터베이스가 필요한데 이럴 때는 공용 테스트 데이터베이스를 따로 구축해서 사용하고 있습니다. 로컬 데이터베이스는 개발자가 마음대로 변경할 수 있기 때문에 구현하고 있는 기능에서 필요한 데이터베이스 변경 사항을 바로 반영해 테스트를 수행하며, 테스트가 온전히 수행되면 변경내역을 공용 데이터베이스에 반영합니다. (직접 하거나 혹은 DBA를 통..
-
Mock Object 탄생 비화(1)Object & Test 2011. 6. 27. 21:31
1999년 말, 런던에 Archway 역 근처의 라운드어바웃에서 이야기가 시작된다. 어느 저녁 런던 소프트웨어 아키텍처 그룹의 몇몇 멤버들이 그 당시에 주요 소프트웨어 이슈에 대한 이야기를 나누기 위해 모여 들었다. 이야기는 애자일 소프트웨어 개발에 대한 경험을 나누는 방향으로 옮겨갔고, 나는 테스트를 작성하는 것이 우리 코드에 끼치는 영향에 대해 이야기 했다. 사실 이 시점은 첫 번째 익스트림프로그래밍 책이 출판되기도 전이었고, 우리 같은 팀들은 무엇을 가져야 좋은 테스트인지를 포함한 - 어떻게 하면 TDD를 제대로 할 수 있는지에 대해 아직 탐험(연구) 중이었다. 특히, 나는 테스트를 용이하게 하려다 보니 객체에 “”getter”메소드를 자꾸 추가하게 되는 경향에 대해 이야기를 했는데, 사실 이런 행..
-
올바른 단위테스트 검증 로직 작성법Object & Test 2010. 12. 6. 13:43
테스트를 작성할 때 코드를 어떻게 작성해야 할지 고민되는 시점이 있는데 바로 작성한 테스트가 잘 수행되었는지 검증(Verification)하는 부분을 작성할 때입니다. 검증할 데이터가많거나 복잡한 경우 Assert문으로 검증하는 게 어렵게 느껴지기 때문입니다. 예를 들어, 검증할 객체가 리스트 안에 여러 개 들어 있다거나, 리스트 안에 들어있긴 한데 몇 번째 있는지는 모른다거나, 아니면 들어 있는 순서가 테스트 수행할 때마다 바뀐다던가 하는 경우에 특히 그렇습니다. 이럴 경우, 테스트를 검증하기 위해 루프나 조건문을 사용하고자 하는유혹을 느끼게 됩니다. 뭐 딱히 안될 것도 없구요. 다음은 그렇게 해서 등장하는 검증 로직입니다. 저도 이전에 이런 식으로 테스틀 작성하곤 했습니다. public void te..