Проблемы со связыванием в модульном тестировании Xcode приложения iOS со встроенным кодом на C

#xcode #xctest #xcode10.1 #xctestcase

#xcode #xctest #xcode10.1 #xctestcase

Вопрос:

Я пытаюсь исправить наши модульные тесты. Приложение для iOS является сложным, с рядом библиотек с открытым исходным кодом, статически связанных с двоичным файлом приложения, включая Google protobuf и Boost. Они построены как библиотеки статических ссылок в отдельных целях в нашем проекте приложений для iOS и связаны с основным приложением.

До сих пор эти библиотеки также были связаны непосредственно с целью тестирования, хотя приложение проводит тестирование. Но я столкнулся с проблемой на ранней стадии инициализации Google Protobuf, которая заставляет меня думать, что наличие этой библиотеки как в тестовой цели, так и в основном целевом приложении является проблемой. Поэтому я удалил статические библиотеки из цели тестирования, полагая, что методы Objective-C , которые ссылаются на материал в этой библиотеке, все равно найдут его в исполняемом файле основного приложения. Похоже, это не так, поскольку компоновщику не удается связать тестовые файлы, которые ссылаются на код C , определенный в статической библиотеке, связанной с двоичным файлом приложения.

Код Objective-C и Swift, похоже, связаны правильно.

Я не уверен, что делать, чтобы разрешить эту ситуацию. Насколько я понимаю модульное тестирование Xcode, обычно код основного приложения не включается в цель тестирования. Но я не уверен, как сообщить Xcode, что мои тестовые файлы должны иметь возможность связываться с произвольным кодом в приложении.

Все это есть в Xcode 10.1.

Ответ №1:

Нередко приходится ссылаться на одни и те же библиотеки как в производственном, так и в тестовом коде. Представьте библиотеку с объектом Foo, используемым в производстве. Некоторые тесты захотят создать Foo. Но они не могут просто извлечь его из приложения. Тесты также должны быть связаны с библиотекой.

Комментарии:

1. Я не думаю, что это так. Я успешно связал его в примере проекта. Проблема с попыткой связать статическую библиотеку с моей целью тестирования, а также с целью приложения заключается в том, что она пытается создать экземпляр некоторого статического материала дважды (protobuf), и это приводит к сбою.