2

我第一次使用 Xcode 4 和 GHUnit 编写一些单元测试。所有的建议似乎都建议使用 GHUnit 而不是 OCUnit。

我有一个名为“myList”的自定义集合对象,并传递一条消息以在index:-1. 因此,它正确地抛出了一个 NSRangeException (来自底层的可变数组)。

我正在努力用 GHAssertThrowsSpecific 断言来解决这个问题。

以下代码行不会编译说“未知类型名称'NSRangeException'。

GHAssertThrowsSpecific(s = [myList selectionAtIndex:-1],
            NSRangeException, @"Should have thrown an NSRangeException", nil);

#importing "Foundation/NSException.h"在 NSRangeException 似乎被定义的地方。如果我将其更改为:

GHAssertThrowsSpecific(s = [myList selectionAtIndex:-1],
            NSException, @"Should have thrown an NSException", nil);

然后编译得很好并且断言有效,所以它与 NSRangeException 有关。

如果我查看标题, NSRangeException 似乎被定义为NSString * const在这种情况下,我如何尝试断言我期望捕获它。

我显然很愚蠢,因为我看不出我做错了什么。

4

1 回答 1

1

好的,所以我找到了这个问题的答案。

NSRangeException 实际上只是一个指向包含“NSRangeException”的字符串的指针。

我应该使用 GHAssertThrowsSpecificNamed,而不是使用 GHAssertThrowsSpecific,它采用命名异常字符串的附加参数,如下所示:

GHAssertThrowsSpecificNamed(s = [myList selectionAtIndex:-1],
  NSException, NSRangeException, @"Should have thrown an NSRangeException", nil);

这行得通。

于 2011-07-25T19:06:07.353 回答