gpt4 book ai didi

iphone - 使用 OCMock 1.77 对 iOS4 和 Xcode 4/SDK4.3 进行单元和应用程序测试

转载 作者:太空狗 更新时间:2023-10-30 03:36:31 26 4
gpt4 key购买 nike

我正在尝试使用 OCMock 1.77 对 iOS4 和 Xcode 4/SDK4.3 进行单元和应用程序测试。我已按照此处的说明使用 OCMock 作为静态库:http://www.mulle-kybernetik.com/software/OCMock/ .单元和应用程序测试在没有 OCMock 的情况下运行良好。

当我添加 OCMock 并尝试为模拟器运行 OCMock 的测试套件(单元测​​试)时,我的测试装置崩溃并显示代码 134。测试装置在设备上运行良好(应用程序测试)。如果我查看控制台,我会看到下面的消息——这表明我没有按照上述 URL 中的说明添加 -force_load 链接器标志。但是我有……有什么想法吗?

我看了这个:Test rig exited abnormally with code 134 with OCMock verify on iOS 4这表明这种行为是一个错误——但我不确定它是否是相同的情况,因为我正在运行 OCMock 测试套件。如果是错误,是否有在单元测试中使用模拟的变通方法?

TIA。

=====

控制台输出:

3/30/11 1:02:32 AM  otest[38552]    *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '** Expected method not present; the method getArgumentAtIndexAsObject: is not implemented by NSInvocation. If you see this exception it is likely that you are using the static library version of OCMock and your project is not configured correctly to load categories from static libraries. Did you forget to add the -force_load linker flag?'
*** Call stack at first throw:
(
0 CoreFoundation 0x004a05a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x002cf313 objc_exception_throw + 44
2 CoreFoundation 0x00458ef8 +[NSException raise:format:arguments:] + 136
3 CoreFoundation 0x00458e6a +[NSException raise:format:] + 58
4 LogicTests 0x00f89de4 +[OCMockObject initialize] + 115
5 libobjc.A.dylib 0x002cfd9b _class_initialize + 380
6 libobjc.A.dylib 0x002d773f prepareForMethodLookup + 73
7 libobjc.A.dylib 0x002ce069 lookUpMethod + 86
8 libobjc.A.dylib 0x002ce1d6 _class_lookupMethodAndLoadCache + 40
9 libobjc.A.dylib 0x002e10e3 objc_msgSend + 87
10 SenTestingKit 0x20108824 +[NSObject(SenTestRuntimeUtilities) senAllSubclasses] + 107
11 SenTestingKit 0x201074a7 +[SenTestSuite updateCache] + 39
12 SenTestingKit 0x20107443 +[SenTestSuite suiteForBundleCache] + 92
13 SenTestingKit 0x201073a4 +[SenTestSuite testSuiteForBundlePath:] + 108
14 SenTestingKit 0x2010606b +[SenTestProbe specifiedTestSuite] + 332
15 SenTestingKit 0x20106792 +[SenTestProbe runTests:] + 156
16 otest 0x000023c7 0x0 + 9159
17 otest 0x000025f2 0x0 + 9714
18 otest 0x0000209a 0x0 + 8346
19 otest 0x00002049 0x0 + 8265
)

最佳答案

  • http://ocmock.org/#download 下载 OCMock *.** (在撰写本文时为 1.77)
  • 在 OCMock/(或其他文件夹)中解压 --> 您将有两个文件夹“Release”和“Source”
  • 复制 xCode 项目文件夹中的“Release/Library”文件夹
  • 将您的文件与 xcode 链接,将所有“Library”文件夹拖到您的项目中
    • 选择应用程序测试目标作为目标!
  • 转到测试目标的“build设置”
    • 在“搜索路径”下添加:+“Header Search Paths”--> 插入您的 OCMock headers(.h) 的路径(类似于 $(PROJECT_DIR)/Library/Headers) +"Library Search Paths"--> 插入你的 OCMock library(.a) 的路径(类似于 $(PROJECT_DIR)/Library/)注意:作为路径,您还可以使用 $(PROJECT_DIR) 或 $(SRCROOT)/并选择递归复选框以避免插入完整路径
      • 在“链接”下添加:+“其他链接标志”--> -all_load

现在一切都应该正常工作了。验证:

#import <OCMock/OCMock.h>
// simple test to ensure building, linking,
// and running test case works in the project
- (void)testOCMockPass {
id mock = [OCMockObject mockForClass:NSString.class];
[[[mock stub] andReturn:@"mocktest"] lowercaseString];
NSString *returnValue = [mock lowercaseString];
STAssertEqualObjects(@"mocktest", returnValue, @"Should have returned the expected string.");
}

- (void)testOCMockFail {
id mock = [OCMockObject mockForClass:NSString.class];
[[[mock stub] andReturn:@"mocktest"] lowercaseString];
NSString *returnValue = [mock lowercaseString];
STAssertEqualObjects(@"thisIsTheWrongValueToCheck", returnValue, @"Should have returned the expected string.");
}

非常感谢:

恩里科·波塔尼

关于iphone - 使用 OCMock 1.77 对 iOS4 和 Xcode 4/SDK4.3 进行单元和应用程序测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5482562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com