Noel Llopis의 C++ 단위 검사 프레임웍 6종 비교
GPG 시리즈에도 글을 기고했던 C++ for Game Programmers의 저자 Noel Llopis가 며칠 전 여섯 가지 C++ 단위 검사(unit testing) 프레임웍들을 비교한 글을 올렸습니다.
Exploring the C++ Unit Testing Framework Jungle
글에서 Noel은 바람직한 UT 프레임웍의 요건을 일곱 가지로 정리했는데요. 인용하자면:
- Minimal amount of work needed to add new tests.
- Easy to modify and port.
- Supports setup/teardown steps (fixtures).
- Handles exceptions and crashes well.
- Good assert functionality.
- Supports different outputs.
- Supports suites.
저도 공감합니다. 사실 저도 미적미적 JACU라는 C++용 프레임웍을 하나 만들고 있는데, 저 일곱 가지 사항들을 지침으로 삼아야겠습니다.
JACU는 아직 실험적인 단계이지만, 현재 1 번 사항만큼은 자신이 있습니다 :) Noel의 글 처음에 나오는 "Ideal framework"에 나오는 이상적인 형태와 거의 흡사합니다. 뭐, Noel이 이상적으로 생각한 형태가 CppUnitLite의 것이고, JACU가 바로 그 CppUniteLite를 본딴 것이므로 당연한 일입니다만.. ^^
어쨌든 JACU에 관심 가져주시길~
예전 댓글(읽기 전용)
-
조희연, 2005-03-05 18:03 :
CppUnit 을 쓰다 CppUnit2 를 CVS에서 가져다 쓰다 지금은 CppUnitLite를 씁니다. 역시, 가볍고 단순한게 좋은듯 합니다. CppUnit이 나름 데로 DLL 상의 TestSuit도 테스팅 하지만, CppUnitLite 에다 자체적으로 DLL 속에 인터페이스를 노출하면 아쉬운데로 DLL로딩해서 테스팅을 자동화 하니 별로 아쉬울게 없더군요....
-
안녕하세요. 글에 인용하신 7가지 원칙을 만족하는 C++용 유닛테스트 프레임워크는 정말 찾을 수가 없는 것 같습니다... ㅠㅠ 이에 매우 갈증을 느끼다가 두어가지 아이디어를 기반으로 얼마 전부터 직접 개발을 시작한 사람입니다. Windows에서는 Visual C++ 환경을, Mac OS X 에서 Xcode/gcc 환경을 사용하고 있어서 포팅도 매우 중요한 덕목으로 꼽고 개발을 진행 중에 있습니다. JACU는 우연히 발견했는데 아이고, 3년 전 글이네요. 제 코드도 namespace를 이용한 fixture와 setUp/tearDown을 지원한다는 점에서 기본적으로 동일한 아이디어인지라 JACU가 매우 반갑습니다. ^^ JACU의 최근 소식이 궁금한데 알려 주실런지요? ^^
-
안녕하세요~ 지금으로서는 JACU 개발을 더 진행할 생각이 없고요. IDE와 통합 지원 등 제대로 만들려면 이거 저거 해야 할 것이 많더라고요. 그냥 제 호기심을 충족하는 선에서 끝난 것 같습니다...
http://daonaro.tistory.com/entry/%EA%B0%84%EB%8B%A8%ED%95%9C-%EB%8B%A8%EC%9C%84-%ED%85%8C%EC%8A%A4%ED%8A%B8 잘 봤습니다. 간단하고 깔끔하네요...
말이 나온 김에... 언젠가는 이런 스타일을 지원하는 프레임워크를 한 번 만들어 보고 싶습니다. Test("테스트에 대한 좀 더 서술적인 이름") { ... 테스트 코드 ... }
테스트 이름이 반드시 식별자일 필요가 있느냐는 것이지요... 루비인가 루아인가에서 저런 테스트 프레임웍이 있던 것으로 기억합니다. C++에서도 불가능하지는 않을 것 같습니다...
-
아네, 제 블로그에 예전에 적어둔 글을 보셨군요. ^^ 그 버전은 fixture 등은 지원하지 않는 아주 간단한 형태로 되어 있지요... 실제 구현 코드와 테스트 코드를 분리하지 않고 바로 옆에 함께 두었을 때 이점이 있는 경우에 간단히 사용했던 것입니다. '설치'도 해야 하고 사용법도 번거로운 여타 UT프레임웍을 사용하기가 귀찮아서... ^^;
혹시 실례가 되지 않는다면 제가 JACU 를 수정/변형해서 사용해도 될런지요? 현재 CVS의 소스만으로도 기본적인 조건은 충족하는지라, 굳이 제가 새로 개발할 필요를 못느끼게 잘 만드신 것 같습니다. 좀더 사랑해 준다면 JUnit에 버금가는 멋진 녀석이 될 수도 있지 않을까 해서... 혹 어떠한 형태나 방향으로든 발전적인 쪽으로 가서 공개할만하다면 다시 나누도록 하겠습니다. 허락해 주시겠지요? ^^
-
되고 말고요~오히려 고맙습니다.
CVS의 소스 파일들에는 라이선스가 명시되어 있지 않고 KLDP.net 프로젝트 페이지에만 GPL로 해 두었었는데, 혹시 몰라서 좀 더 느슨한 MIT/X로 바꾸어 두었습니다. (원래는 GPL을 더 느슨한 라이선스로 바꾸면 안 되지만, JACU는 공식적으로 배포한 적이 없었으므로 문제가 되지 않을 것입니다...)
그리고 혹시 JACU라는 이름을 계속 사용하고 싶으시면, 그리고 KLDP.net에서 관리를 하실 거라면 ID를 알려주시면 프로젝트 관리자로 설정해 드리겠습니다.
-
감사합니다. ^^ 라이선스 문제까지 고려해주셔서 더 감사합니다. 사실 테스팅 프레임워크가 GPL이면 상용개발 등 여기저기 널리 쓰이기에는 조금 꺼려질 수도 있다고 생각해 오던 차라... KLDP.net 에서 끌어나가는 것도 생각해봤지만, CVS가 아닌 서브버전만 쓰고 있고, 제가 엄밀히 리눅스 개발자라고 하긴 또 그렇고 해서 조금 망설이게 되네요. 이름은... 큰 변화가 있거나 더 좋은 이름이 생기기 전까지는 저도 JACU라고 쓰도록 하겠습니다. ^^ 앞으로 JACU에게 좋은 소식이 생기면 바로 알려 드리겠습니다. ^^
저도 제가 쓸 용도로 CppUnitLite를 고쳤고, 이제 사용하려고 합니다. (실제 적용해 본 게 아니라서 미흡해 아직 source code를 공개할 단계는 아닙니다.^^;) JACU를 보니 제가 구현한 방식과 다르지만 시험 추가시 최소한의 code라는 기본적인 방향은 비슷한 것 같습니다. 그런데 단위 시험에 대해서는 필요성을 느끼는데, framework가 필요한지 아직 잘 모르겠습니다.