use*_*764 10 iphone tdd unit-testing 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
Run Code Online (Sandbox Code Playgroud)
我可以看到,正是测试套件'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}"
Run Code Online (Sandbox Code Playgroud)
至少对于OCUnit,我可以跟踪正在运行的测试用例并最终对其进行调试(但是这可能需要很长时间才能没有任何类和行号信息...)
你是如何处理这些问题的?
提前致谢.
PS:这里是如何重现问题,这很简单:
只需创建一个类,该方法在调用时会崩溃(在您执行TDD时会一直发生):
- (void) crashMethod {
NSMutableArray *crashArray;
[crashArray addObject:[NSObject new]];
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个调用此方法的测试用例:
- (void) testFail {
ClassToTest *test = [[ClassToTest alloc] init];
[test crashMethod];
[test release];
}
Run Code Online (Sandbox Code Playgroud)
先谢谢,文森特
我想我还是会选择GTB..
使用 xCode 3.2 OCUnit 错误和警告不会显示在代码内。似乎这是一个已知问题: lhttp://osdir.com/ml/xcode-users/2009-10/msg00216.html
有了 GTB 就可以正常工作了。我不敢相信,但 GTB 似乎比 OCUnit 与新版本的 xCode 集成得更好......
单元测试的调试不需要任何东西,它从一开始就工作得很好。(使用 xCode 你需要一堆设置: http://chanson.livejournal.com/119578.html
使用 GTB,您可以在设备上运行测试,并且拥有用于 UI 测试的工具(似乎您可以创建一个假的 UIView 层次结构,然后将其与运行时的内容进行比较)。我对 UI 自动测试持怀疑态度(昂贵且难以维护),但这是一个很好的功能!
http://code.google.com/p/google-toolbox-for-mac/wiki/CodeVerificationAndUnitTesting
归档时间: |
|
查看次数: |
1739 次 |
最近记录: |