일반적으로 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. 이 현상에 대해 더 자세한 사항을 알고 있는 분은 좀 알려주세요~
우리는 아무 생각 없이 본능적으로 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. 이 현상에 대해 더 자세한 사항을 알고 있는 분은 좀 알려주세요~