为什么,当我测试方法抛出异常并且方法抛出异常时,测试是否会停止?

时间:2014-03-13 16:14:43

标签: objective-c unit-testing exception throw xctest

我有一个单元测试,用于测试methodcondition出现时是否抛出异常,而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”和调试器出现在控制台中。

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
}