2012-08-06 3 views
1

기존 C++ 라이브러리 의존성이있는 iOS 어플리케이션 테스트를 작성하려고합니다. 레거시 라이브러리에는 초기화 루틴과 정적 변수가 있으며이 변수는 앱주기마다 한 번 실행/설정해야합니다.iOS Application 정적 라이브러리 초기화 테스트

제대로 작동하는 테스트 대상을 만들었습니다. 내 테스트 대상은 내 응용 프로그램을 번들 로더를 통해 테스트 호스트로 사용하도록 설정됩니다. 그러면 iOS 앱이 실행 된 다음 [SenTestCase invoke test]가 테스트를 실행합니다. 이 설정을 감안할 때 응용 프로그램에서 라이브러리를 초기화하고 테스트가 "라이브러리가 이미 초기화되었습니다"상태에서 실행되도록 할 수 있기를 바랍니다. Apple 응용 프로그램 테스트 패러다임에 맞는 것 같습니다. 그러나 테스트가 실행될 때 앱 실행 중에 초기화되는 기존 라이브러리의 정적 변수는 NULL입니다. 변수를 재설정하는 사용자 코드는 없습니다.

내 애플리케이션 테스트가 내 앱의 정적 변수에 액세스 할 것으로 기대하고 있습니다. 이를 허용하도록 구성 할 수있는 것이 있습니까? 내가 놓친 게 있니?


귀찮은 정적 변수는 링크 된 C++ 라이브러리에 있습니다. 앱 및 유닛 테스트는 동일한 애플리케이션 범위를 공유하지 않는 것 같습니다.

+0

앱에 액세스 할 수있는 다른 단위 테스트가 있습니까? –

+0

다른 모든 테스트에서 앱에 액세스 할 수 있습니다. 문제를 일으키는 것은 C++ 라이브러리의 정적 변수 일뿐입니다. – HatAndBeard

+1

나는 이것에 또한 달리고있다. 문제는 정적 변수의 두 버전이 생성된다는 것입니다. 테스트 바이너리에 1 개, 응용 프로그램 바이너리에 1 개. 명확히하기 위해, 나는 이것이 C++뿐만 아니라 모든 정적 변수와 관련된 문제라고 생각합니다. – Tylerc230

답변

4

비슷한 문제점이 있지만 Obj-C 정적 라이브러리가 있습니다. 싱글 톤은 두 번 만들어졌습니다 (앱에서 한 번, 테스트 번들에서 한 번). 포인터는 정적 메모리에도 있습니다.

문제점은 라이브러리를 테스트 번들 대상에 연결하는 것이 었습니다.

"Link Binary With Libraries"목록에서 라이브러리를 제거하여 문제를 해결했습니다. 그런 다음 정적 라이브러리의 빌드 설정을 변경해야했습니다. "기호 숨김 기본값"을 NO로 설정해야했습니다.

+1

오, 당신은 내 엉덩이를 구 했어요! 정적 lib (.a)를 두 번 연결 했으므로, dispatch_once를 사용하여 두 번있는 곳에서 singleton에 대한 정적 var를 두 번 연결했습니다. – malaba