单元测试和TDD,OCUnit与Google Tool Box

时间:2009-12-14 17:34:44

标签: iphone unit-testing tdd ocunit

我正在尝试在OCUnit和Google Tool Box之间进行选择,你有任何偏好,会推荐其中一个,为什么? 我很想知道你对2中任何一个的经历。

我对他们两个主要的问题是测试方法中的崩溃管理(例如:BAD ACCESS) 没有人能告诉我发生了什么类别的崩溃!!!

使用Google Tool Box,我可以看到正在运行哪个测试套件而不是测试用例(当您的测试套件有50个测试用例时,您应该怎么做?)

使用OCUnit,我至少可以看到测试套件中导致崩溃的测试用例。

以下是我与GTB的消息:

Executed 0 tests, with 0 failures (0 unexpected) in 0.000 (0.000) seconds

Test Suite 'LogicTests' started at 2009-12-14 18:03:15 +0100

 /Users/admin/Documents/Tests/GTBTest/RunIPhoneUnitTest.sh: line 122:   688    Segmentation fault      "$TARGET_BUILD_DIR/$EXECUTABLE_PATH" -RegisterForSystemEvents

 Command /bin/sh failed with exit code 139

我可以看到,正是测试套件'LogicTests'引发了崩溃,但仅此而已。

对于OCunit,这里是同一错误的消息:

Test Suite 'LogicTests' started at 2009-12-14 17:51:26 +0100
Test Case '-[LogicTests testFail]' started.
/Developer/Tools/RunPlatformUnitTests.include: line 415:   536 Segmentation fault      "${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}"

至少在OCUnit中,我可以跟踪正在运行的测试用例并最终对其进行调试(但这可能需要很长时间才能没有任何类和行号信息......)

你如何处理这些问题?

提前致谢。

PS:这里是如何重现问题,这很简单:

只需创建一个类,该方法在调用时会崩溃(在您执行TDD时会一直发生):

- (void) crashMethod {
 NSMutableArray *crashArray;
 [crashArray addObject:[NSObject new]];
}

然后创建一个调用此方法的测试用例:

- (void) testFail {
    ClassToTest *test = [[ClassToTest alloc] init];
 [test crashMethod];
 [test release];
 }

提前致谢, 文森特

2 个答案:

答案 0 :(得分:3)

我想我还是会选择GTB ..

使用xCode 3.2 OCUnit错误和警告未显示在代码中。 似乎这是一个知道问题: lhttp://osdir.com/ml/xcode-users/2009-10/msg00216.html

使用GTB可以正常工作。 我不敢相信,但似乎GTB与新版本的xCode比OCUnit更好地集成....

单元测试的调试不需要任何东西,它从一开始就很好用。 (使用xCode,您需要一堆设置: http://chanson.livejournal.com/119578.html

使用GTB,您可以在设备上运行测试,并且您拥有用于UI测试的工具(似乎您可以创建虚假的UIView层次结构,然后将其与运行时的结果进行比较)。我对UI自动测试(昂贵且难以维护)持怀疑态度,但这是一个很好的功能!

http://code.google.com/p/google-toolbox-for-mac/wiki/CodeVerificationAndUnitTesting

答案 1 :(得分:0)

BTW Google工具箱现在可以打印测试案例已启动的消息,以防有人想知道; - )