在设备上运行OCUnit应用程序测试套件时偶尔会出现错误

时间:2011-01-12 12:39:30

标签: iphone unit-testing testing ocunit

在运行应用程序测试时(即在设备上),我的OCUnit测试套件出现了一些问题。偶尔,我会收到一个似乎从OCUnit类抛出的棘手错误。我一直试图查看添加到测试套件中的文件,但无法理解它。

我在设置测试目标时遵循了Apple文档并查看了其他教程,从而产生了以下目标(以及缩进的依赖项):

LogicTests

MyApp的 LogicTests

ApplicationTests MyApp的

MyAppTesting ApplicationTests

最后一个(MyAppTesting)是我在设备上运行以启动测试套件的那个。

如前所述,测试无法启动,有时会在控制台中抛出以下输出:

2010-11-17 12:02:48.537 VCCTesting[12018:307] *** Assertion failure in -[SenTestClassEnumerator init], /SourceCache/OCUnit/OCUnit-1685/SourceCode/SenTestingKit/SenTestClassEnumerator.m:137

2010-11-17 12:02:48.556 VCCTesting[12018:307] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'objc_getClassList returned more classes than it should have.'
*** Call stack at first throw:
(
0   CoreFoundation                      0x30897ed3 __exceptionPreprocess + 114
1   libobjc.A.dylib                     0x3002f811 objc_exception_throw + 24
2   CoreFoundation                      0x30897d15 +[NSException raise:format:arguments:] + 68
3   Foundation                          0x349f932f -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 62
4   SenTestingKit                       0x20107c29 -[SenTestClassEnumerator init] + 292
5   SenTestingKit                       0x201079fd +[SenTestClassEnumerator classEnumerator] + 24
6   SenTestingKit                       0x2010777d +[NSObject(SenTestRuntimeUtilities) senAllSubclasses] + 92
7   SenTestingKit                       0x201067b5 +[SenTestSuite updateCache] + 28
8   SenTestingKit                       0x20106753 +[SenTestSuite suiteForBundleCache] + 54
9   SenTestingKit                       0x201065db +[SenTestSuite structuredTests] + 14
10  SenTestingKit                       0x201065a1 +[SenTestSuite allTests] + 40
11  SenTestingKit                       0x20106573 +[SenTestSuite defaultTestSuite] + 14
12  SenTestingKit                       0x201057a3 +[SenTestProbe specifiedTestSuite] + 106
13  SenTestingKit                       0x20105d83 +[SenTestProbe runTests:] + 94
14  Foundation                          0x349c7e8d __NSFireDelayedPerform + 368
15  CoreFoundation                      0x3084e7fb __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 14
16  CoreFoundation                      0x3084e2ad __CFRunLoopDoTimer + 860
17  CoreFoundation                      0x3081f7a5 __CFRunLoopRun + 1088
18  CoreFoundation                      0x3081f277 CFRunLoopRunSpecific + 230
19  CoreFoundation                      0x3081f17f CFRunLoopRunInMode + 58
20  GraphicsServices                    0x31e445f3 GSEventRunModal + 114
21  GraphicsServices                    0x31e4469f GSEventRun + 62
22  UIKit                               0x31e51123 -[UIApplication _run] + 402
23  UIKit                               0x31e4f12f UIApplicationMain + 670
24  VCCTesting                          0x000234ff main + 70
25  VCCTesting                          0x00002538 start + 40
)
terminate called after throwing an instance of 'NSException'

有谁知道可能出现什么问题?

感谢任何帮助, 的Kristofer

P.S。我已经在App dev论坛上发布了这个,但还没有运气:https://devforums.apple.com/message/333890

4 个答案:

答案 0 :(得分:19)

你有NSZombieEnabled吗?当我在我的单元测试启动目标的参数中将NSZombieEnabled设置为YES时,我遇到了这个问题。我已经尝试了一切(清理/退出XCode /休息模拟器内容)。 到目前为止唯一的解决方案是在我的单元测试启动中禁用僵尸

答案 1 :(得分:0)

我想我已经弄明白为什么我也会收到这个错误 - 或许同样的事情发生在你身上:

我设置了两个产品,一个用于内部测试(包含首选项窗格),另一个用于应用商店发布。两个产品目标都使用相同的产品名称(构建设置中为PRODUCT_NAME)进行设置。

这在XCode 3.x中运行良好,但是XCode 4在每次构建beta产品时都试图构建商店产品。我认为这是由于XCode放置其派生文件的位置发生了变化 - XCode 4存储测试版并将产品存储在同一路径上,因此在构建测试版产品时,存储输出文件已更改并需要重建。 ..

无论如何......更改测试版产品名称已修复 暂时修复问题...我还更改了Info.plist中的包标识符,以便两个产品有不同的标识符。现在,当我构建一个产品时,另一个产品不能同时构建,但是在测试运行时我仍然会遇到崩溃: - (

我现在唯一的想法是完全重新创建项目,复制整个设置和文件,看看XCode 4是否做了不同的事情。那并向Apple提起支持事件......

干杯,

亚当

答案 2 :(得分:0)

我还不是100%肯定,但似乎可以通过为每个测试目标创建不同的方案来解决此问题。 今天下午我犯了这个错误,但是在我为不同的测试目标创建单独的方案之后,它已经发生了一段时间。

答案 3 :(得分:0)

对于任何可能遇到这个问题的人,就像我一样:

KIFTester加载
断言失败 - [SenTestClassEnumerator init],/ SourceCache / OCUnit / OCUnit -5315 / SourceCode /SenTestingKit /SenTestClassEnumerator.m:136
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'objc_getClassList返回了比它应该有的更多的类。'

问题原来是GoogleAnalytics 3.0 更新到3.0.3,但这些库中的任何一个仍然存在相同的问题 libGoogleAnalytics_debug.a libGoogleAnalyticsServices.a

要解决它,我只是不包括它们进行测试。