Как я могу создать тесты приложений в комплекте тестового тестирования Cocoa Touch с Xcode 4? - PullRequest
6 голосов
/ 10 апреля 2011

Я создал проект Xcode 4 с комплектом тестирования Cocoa Touch Unit. Я могу успешно создавать и запускать логические тесты. Однако я не уверен, как создать тест как тест приложения, который выполняется на устройстве iOS и использует UIKit. Когда я создаю тест, который использует UIKit, и пытаюсь запустить тесты в комплекте на устройстве, Xcode 4 выскакивает диалоговое окно с текстом:

Тестирование логики недоступно

Тестирование логики на устройствах iOS не поддерживается. Вы можете запускать логические тесты на симуляторе.

Я попытался запустить тест на симуляторе, но, конечно, он не удался при выполнении вызовов UIKit.

Кто-нибудь знает, как создавать и запускать тесты приложений на устройствах iOS с использованием Xcode 4 и пакета тестирования Cocoa Touch Unit?

РЕДАКТИРОВАТЬ: Если это поможет, вот код теста:

@implementation TinyWordsTests

- (void)setUp
{
    [super setUp];
    CC_DIRECTOR_INIT();
}

- (void)tearDown
{
    CC_DIRECTOR_END();
    [super tearDown];
}

- (void)testExample
{
    CCScene *scene = [TWOHelloWorldLayer scene];
    STAssertNotNil(scene, @"Scene must not be nil.");
}

@end

и полученная трассировка стека из GDB при запуске теста в симуляторе:

(gdb) bt
#0  0x00464781 in __HALT ()
#1  0x003af8ed in _CFRuntimeCreateInstance ()
#2  0x00da81ea in GSFontCreateWithName ()
#3  0x038f55eb in UINewFont ()
#4  0x038f56bd in +[UIFont fontWithName:size:traits:] ()
#5  0x038f507d in +[UIFont fontWithName:size:] ()
#6  0x01a49205 in -[CCTexture2D(Text) initWithString:fontName:fontSize:] (self=0x197f9f0, _cmd=0xe10840, string=0x1a9c900, name=0x1a9c8f0, size=64) at CCTexture2D.m:487
#7  0x01a2d897 in -[CCLabelTTF setString:] (self=0x1981d70, _cmd=0x156e07, str=0x1a9c900) at CCLabelTTF.m:95
#8  0x01a2dc9d in -[CCLabelTTF initWithString:fontName:fontSize:] (self=0x1981d70, _cmd=0xe10840, str=0x1a9c900, name=0x1a9c8f0, size=64) at CCLabelTTF.m:79
#9  0x01a2da9a in +[CCLabelTTF labelWithString:fontName:fontSize:] (self=0x1a9b53c, _cmd=0xe0ddc0, string=0x1a9c900, name=0x1a9c8f0, size=64) at CCLabelTTF.m:53
#10 0x01a01b10 in -[TWOHelloWorldLayer init] (self=0x197ee40, _cmd=0x2c7c) at TWOHelloWorldLayer.m:39
#11 0x01a341bb in +[CCNode node] (self=0x1a99ee4, _cmd=0x3baad59) at CCNode.m:231
#12 0x01a01a80 in +[TWOHelloWorldLayer scene] (self=0x1a99ee4, _cmd=0xe00fa0) at TWOHelloWorldLayer.m:22
#13 0x01a5d430 in -[TinyWordsTests testExample] (self=0x197e490, _cmd=0xe59dd0) at TinyWordsTests.m:30
#14 0x00410c7d in __invoking___ ()
#15 0x00410b51 in -[NSInvocation invoke] ()
#16 0x201043d2 in -[SenTestCase invokeTest] ()
#17 0x20104aa7 in -[SenTestCase performTest:] ()
#18 0x201041d3 in -[SenTest run] ()
#19 0x20106eda in -[SenTestSuite performTest:] ()
#20 0x201041d3 in -[SenTest run] ()
#21 0x20106eda in -[SenTestSuite performTest:] ()
#22 0x201041d3 in -[SenTest run] ()
#23 0x201067a4 in +[SenTestProbe runTests:] ()
#24 0x000023c7 in ?? ()
#25 0x000025f2 in ?? ()
#26 0x0000209a in ?? ()
#27 0x00002049 in ?? ()

Ответы [ 2 ]

8 голосов
/ 01 августа 2011

Чтобы это работало правильно, вам нужно перейти к настройкам сборки вашего тестового пакета и установить ключ Test Host на $(BUNDLE_LOADER).

Кроме того, убедитесь, что ключ Bundle Loader установлен на $(BUILT_PRODUCTS_DIR)/yourAppName.app/yourAppName и в настройках сборки пакета.

2 голосов
/ 10 апреля 2011

К сожалению, тестирование на iOS - мешанина с официальными инструментами.Существует два типа юнит-тестов.Логические тесты, которые не имеют вызовов пользовательского интерфейса и выполняются в симуляторе.Тесты приложений, которые могут работать с пользовательским интерфейсом и манипулировать им, но выполняются только на устройстве.

Похоже, вы написали логические тесты, в которых используется пользовательский интерфейс.Вам нужно создать тесты приложений и запустить их на устройстве.Чтобы сделать это, вы должны выполнить http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html и создать независимую цель приложения для запуска на устройстве, которое включает в себя цель AppTest.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...