我有一个单元测试,用于测试method
在condition
出现时是否抛出异常,而method
会按预期抛出异常。
- (void)testMethodThrowsWhenConditionIsPresent {
XCTAssertThrows([Foo methodWithCondition: condition], @"Condition is true, method should throw exception");
}
以下是异常来源:
- (void)methodWithCondition:(someType)condition {
if (condition) {
[NSException raise: @"condition is true!" format: @"condition is true!"];
}
}
为什么测试会在抛出异常的行停止?测试不会继续,它会在该行停止,当我希望它继续并从1
返回XCTAssertThrows()
时,使测试成功。测试停止,Xcode将我带到它抛出的行,绿色的“Thread 1:breakpoint 1.1”和调试器出现在控制台中。
答案 0 :(得分:3)
因为你有一个断点,它会停止执行。
因为你有一个未处理的异常。未处理的异常会导致程序崩溃。
这个问题的简单答案就是不要抛出异常。在其他编程语言中,如Java,这是完全标准的。但是在Objective-C中,我们并没有真正做到例外。在Objective-C中,应该为TRULY异常行为保存例外。
话虽如此,并强烈建议您找到另一种方法来处理您正在尝试处理的任何内容,这就是您在Objective-C中处理异常的方法:
@try {
// code that could throw an exception
}
@catch (NSException *e) {
// handle the exception...
}
@finally {
// post try-catch code, executed every time
}