为什么在iphone单元测试中实例化UIFont会导致崩溃?

Sco*_*len 17 iphone xcode unit-testing

我正在尝试对一些实例化字体的iphone代码进行单元测试.我已将其缩小到以下崩溃单元测试:

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


@implementation test

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

@end
Run Code Online (Sandbox Code Playgroud)

这与错误崩溃:

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).
Run Code Online (Sandbox Code Playgroud)

似乎有一些设置我没有在我的单元测试目标中做这个工作.你如何对实例化字体的东西进行单元测试?

beO*_*eOn 19

我的一个朋友最近碰到了这个,我挖出了我成功设置的最后一个项目.诀窍是在应用程序测试中运行任何涉及UIFont的测试,而不是单元测试.在设置应用程序测试目标时,需要确保以下几点:

  1. 构建阶段:通过将主目标作为测试目标的依赖项之一,将生产代码添加到测试目标中,而不是将.m文件包含在测试目标中.这仅适用于组织.
  2. BUILD SETTINGS:确保测试目标的"Bundle Loader"设置为$(BUILT_PRODUCTS_DIR)/Your Product Name.app/Your Product Name Again.请注意,它是.../Product.app/Product- 也就是说,路径的最后一段没有.app.如果您想要查看您所指的文件,请找到您的构建产品,右键单击,选择View Package Contents,然后找到可执行文件.
  3. BUILD SETTINGS:您的测试目标的"测试主机"应设置为 $(BUNDLE_LOADER).十分简单.
  4. 构建设置:测试目标的其他链接器标志应包括 -framework SenTestingKit.
  5. 构建设置:"构建后测试"应为否.
  6. 方案:"构建"应包括您的测试目标和主要目标,"测试"是两个目标中选择的唯一框.
  7. 方案:'测试'应仅包括您的测试目标.它包含的文件将自动添加到列表中.

...希望这足以让你们全力以赴.在一个地方并没有完全记录下来,弄清楚如何让两种测试运行花费的时间和痛苦都比我想承认的要多.

奇怪的是,苹果公司似乎已经就此问题撤下了自己的doco.我想知道是否会有另一个变化......

如果您对上述内容有任何补充,请打我.它不是设置应用程序测试的完整指南,但以上是我遇到的无证绊脚石.FMI,我强烈推荐这篇CocoaWithLove文章.


dma*_*ach 9

它没有说得很好,但Apple的测试套件将单元测试分为两个不同的类别:

  • 逻辑测试

    这些测试会在洁净室环境中检查代码的正确功能.

  • 应用测试

    这些测试检查正在运行的应用程序中的代码功能.

似乎有很多与UI相关的代码无法在"逻辑测试"案例中运行.有关逻辑测试与应用程序测试的更多信息,请参见此处

http://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/UnitTesting/01-Unit-Test_Overview/overview.html


Ken*_*ner 1

您在设备上尝试过吗?我似乎记得你只能在设备上运行时在测试中包含 UIKit 内容,而不是针对模拟器......