15

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

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

逻辑测试

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'

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

感谢您的帮助,克里斯托弗

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

4

4 回答 4

19

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

于 2011-05-19T19:27:09.410 回答
0

我想我刚刚弄清楚了为什么我也收到了这个错误——也许同样的事情也发生在你身上:

我设置了两种产品,一种用于内部 beta 测试(带有首选项窗格),另一种用于应用商店发布。两个产品目标都设置了相同的产品名称(PRODUCT_NAME在构建设置中)。

这在 XCode 3.x 中运行良好,但每次我构建 beta 产品时,XCode 4 都会以某种方式尝试构建商店产品。我认为这是由于 XCode 放置其派生文件的位置发生了变化——XCode 4 将 beta 和 store 产品存储在同一路径,所以当 beta 产品构建时,store 输出文件发生了变化,需要重新构建。 ..

无论如何...更改测试版产品名称 暂时解决了问题...我还更改了 Info.plist 中的捆绑标识符,因此这两种产品具有不同的标识符。现在,当我构建一个产品时,另一个产品不会同时构建,但是当测试运行时我仍然会崩溃:-(

我现在唯一的想法是完全重新创建项目,复制设置和文件以查看 XCode 4 是否有不同的功能。那并向Apple提交支持事件......

干杯,

亚当

于 2011-04-04T13:55:01.257 回答
0

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

于 2011-11-10T06:03:19.480 回答
0

仅适用于像我这样可能遇到此问题的任何人:

KIFTester loaded
Assertion failure in -[SenTestClassEnumerator init], /SourceCache/OCUnit/OCUnit-5315/SourceCode/SenTestingKit/SenTestClassEnumerator.m:136
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'objc_getClassList returned more classes than it should have.'

The problem turned out to be GoogleAnalytics 3.0 Updated to 3.0.3 but still the same problem with either of these libraries libGoogleAnalytics_debug.a libGoogleAnalyticsServices.a

To go around it I just don't include them for testing.

于 2014-01-15T11:51:09.930 回答