我正在尝试在 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];
}
提前致谢,文森特