Gre*_*reg 6 iphone cocoa-touch unit-testing
我用Cocoa Touch Unit Testing Bundle创建了一个Xcode 4项目.我能够成功创建和运行逻辑测试.但是,我不确定如何将测试创建为在iOS设备上运行并使用UIKit的应用程序测试.当我创建一个使用UIKit并尝试在设备上运行测试的测试时,Xcode 4弹出一个对话框,说:
逻辑测试不可用
不支持iOS设备上的逻辑测试.您可以在Simulator上运行逻辑测试.
我尝试在模拟器上运行测试,但当然在进行UIKit调用时失败了.
有没有人知道如何使用Xcode 4和Cocoa Touch Unit Testing Bundle在iOS设备上创建和运行应用程序测试?
编辑:如果有帮助,这里是测试代码:
@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
Run Code Online (Sandbox Code Playgroud)
以及在模拟器中运行测试时从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 ?? ()
Run Code Online (Sandbox Code Playgroud)
要使其正常工作,您需要转到测试包的构建设置并将Test Host键设置为$(BUNDLE_LOADER).
此外,确保Bundle Loader键$(BUILT_PRODUCTS_DIR)/yourAppName.app/yourAppName也在bundle的构建设置中设置为to .
不幸的是,iOS 上的测试是官方工具的大杂烩。有两种类型的单元测试。没有 UI 调用并在模拟器中运行的逻辑测试。应用程序测试可以练习和操作 UI,但只能在设备上运行。
听起来您已经编写了测试 UI 的逻辑测试。您想要的是创建应用程序测试并在设备上运行它。为此,您必须遵循http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html并创建一个独立的应用程序目标以在设备上运行,其中包括AppTest 目标。
但是,顺便说一句,这变得非常乏味,因为您必须将所有测试代码和依赖项添加到每个目标和应用程序目标中。您还必须仅将逻辑测试放置在逻辑测试目标中,并将应用程序测试放置在应用程序测试目标中。