개발/형상관리

cppunit을 사용하다 어이 없는 경우 발생...

Dsp 2006. 12. 1. 21:36
일반적으로 cppunit을 이용해서 test case(이하 TC)를 작성할 때,

우리는 아무 생각 없이 본능적으로 TC를 작성한다...
(음.. 나만 그런가?)

여러 실수들이 나올 수 있지만 그 중에서도 제일 황당한 경우를 소개한다 --;

나는 TC를 짜면 linux와 windows에서 모두 돌려보는데,

linux에서는 돌아가고, windows에서는 안 돌아가는 이상한 경우를 만났다.

물론, 내가 os의 차이를 제대로 반영 못한 것이라고 생각했었다.

그러나 아무리봐도 오류를 찾을 수가 없는 것이었다.

'이런 ㅅㅂ --+, 무슨 버그길래 이렇게 안 나오는거쥐'라고 생각하며 디버깅을 하는데,

반나절이 지나도 안 잡히는 거다 --+

나중에 여러 실험을 통해 결론은 내린 것은...

바로... cppunit이 linux와 windows상에서 아주아주~ 약간 다르게 동작한다는 것... --; (허탈...)

linux에서는 TC를 등록한 순서대로 테스트가 수행되지만,

windows에서는 알파벳 순으로 소팅이 되는 것이다.

정확히 이야기하면 windows에서도 cppunit(d).lib만 쓸때는 괜찮은 것 같고,

testrunner(d).lib를 쓰면 이런 어이없는 현상이 나타나는 것 같다.

(아니면 내가 일하는 데서 만든 cppunit의 wrapper즈음 되는 친구가 잘못하는 것일 수도 --+
사실 이 확률이 제일 크다!! 그럼 나와 다른 환경의 분들은 모두 낚이는 거~ ㅎㅎ)

즉, 이런 현상은 TC 이름이 이런 경우에 나타날 수 있겠다.

TC_Overall_Init
TC_01
TC_02

위와 같은 TC가 있고, TC_Overall_Init이란 TC는 본의 아니게 제일 먼저 테스트 되어야 하며,
TC_01, TC_02는 TC_Overall_Init의 결과를 토대로 동작한다고 가정한다.

이 경우 linux에서는 등록된 순서대로 동작을 하는데,
windows에서는 제일 나중에 수행될 수 있다는 것이다.

고로 본인은 TC_Overall_Init을 TC_00으로 수정해서 그냥 패스 시켰다 --;

이 현상이 msvc 6.0에서만 나고, .Net에서는 안 나는지는 모르겠다.

나는 msvc 6.0으로만 테스트 해 봤으니 알수 없다... 귀차니즘 발동...


ps. 이 현상에 대해 더 자세한 사항을 알고 있는 분은 좀 알려주세요~