1

我在方法中有代码,它断言()参数落在给定范围内。我想使用 SenTest 测试用例测试非法参数。

我的第一个假设是我应该使用 STAssertThrows( ... ) 但是这会报告断言失败时不会引发异常。我可以用 STAssert... 宏捕获 assert() 失败吗?

[更新以提供示例]

在类 Foo.m

@interface Foo : NSObject {
    NSUInteger count;
    NSUInteger max;
}
@end

@implementation Foo
-(void) bar:(char) c {
    assert( count < max );
    ...
}
@end

在类 TestFoo.m

@interface TestFoo : SenTestCase {
    Foo testFoo_;
}
@end

@implementation TestFoo
    -(void) testBar {
        STAssertXXX( YYY );
    }
@end

我可以使用什么 XXX 和 YYY 来测试方法 bar 中断言的失败或其他情况:?

4

2 回答 2

2

如果您使用NSAssert(或NSAssert1,NSAssert2等) 而不是assert, 您可以捕获NSInternalInconsistencyException.

于 2012-10-05T18:08:44.970 回答
0

您无法捕获assert,因为它不是 obj-c 异常。要解决此问题,只需声明您自己的宏MY_ASSERT(condition),如果条件不满足,该宏将引发异常并使用它而不是 standard assert

于 2012-10-05T18:07:29.713 回答