views:

384

answers:

4

I'm trying to unit test some iphone code that instantiates fonts. I've narrowed it down to the following crashing unit test:

#import "test.h"
#import <UIKit/UIKit.h>


@implementation test

- (void)testFonts {
  [UIFont systemFontOfSize:12];
}

@end

This crashes with the error:

Test Case '-[test testFonts]' started.
/Developer/Tools/RunPlatformUnitTests.include: line 415: 79768 Trace/BPT trap          "${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}"
/Developer/Tools/RunPlatformUnitTests.include:451: error: Test rig '/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/Developer/usr/bin/otest' exited abnormally with code 133 (it may have crashed).

It seems like there's some setup I'm not doing in my unit test target to make this work. How do you unit test things that instantiate fonts?

+1  A: 

Have you tried it on the device? I seem to remember you can only include UIKit stuff in tests when running on the device, not against the simulator...

Kendall Helmstetter Gelner
FYI UIKit stuff works just fine in unittests when using Google Toolbox for Mac. http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting
dmaclach
A: 

I have this error even whout UIKit included.

Semka Novikov
By the way, i just notice i had old XCode. Installing new developer tools with new iPhone SDK fix this problem for me.
Semka Novikov
A: 

I'm seeing this exact problem with 3.2 (and 3.1.3). I've seen it in two separate machines, so I don't think that my SDK is broken.

I created a new iPhone view based project, and added a unit test, and one test case.

This is set up as a logic test.

Console output is as follows:

Test Case '-[TestTests testTests]' started.
/Developer/Tools/RunPlatformUnitTests.include: line 415: 21141 Trace/BPT trap               "${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}"
/Developer/Tools/RunPlatformUnitTests.include:451: error: Test rig  '/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk/Deve loper/usr/bin/otest' exited abnormally with code 133 (it may have crashed).
Command /bin/sh failed with exit code 1

If I set up the unit test for debugging, then I can see the crash, with the following stacktrace:

#0  0x00342d51 in __HALT 
#1  0x002947c7 in _CFRuntimeCreateInstance
#2  0x00b8441e in GSFontCreateWithName
#3  0x028c8f31 in +[UIFont systemFontOfSize:]

I can see Kendall's point (UIKit stuff may only work on the device), but that doesn't seem to be documented very well anywhere.

Snydely Whiplash
A: 

It doesn't state it very well, but Apple's Testing Kit splits unit tests into two separate categories:

  • Logic Tests

    These tests check the correct functionality of your code in a clean-room environment.

  • Application tests

    These tests check the functionality of your code in a running application.

There appears to be a lot of UI related code that can't be run in the "Logic Test" case. More information about Logic Tests vs Application Tests here.

http://developer.apple.com/iphone/library/documentation/xcode/conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html

dmaclach