我正在尝试编写自己的代码HCMatcher
,以便在处理对象集合时简单地使用一些断言。
目前我的测试方法是这样做的:
__block int totalNumberOfCells = 0;
[configurations enumerateObjectsUsingBlock:^(Layout *layout, NSUInteger idx, BOOL *stop) {
totalNumberOfCells += [layout numberOfCells];
}];
assertThatInt(totalNumberOfCells, is(equalToInt(3)));
我将在很多地方做这种断言,所以我想把它简化成这样:
assertThat(configurations, hasTotalNumberOfFeedItemCells(3));
这是我创建自己的 OCHamcrest 匹配器的尝试:
@interface HasTotalNumberOfFeedItemCells : HCBaseMatcher {
NSInteger correctNumberOfCells;
}
- (id)initWithCorrectNumberOfCells:(NSInteger)num;
@end
OBJC_EXPORT id <HCMatcher> hasTotalNumberOfFeedItemCells(int num);
@implementation HasTotalNumberOfFeedItemCells
- (id)initWithCorrectNumberOfCells:(NSInteger)num {
self = [super init];
if (self) {
correctNumberOfCells = num;
}
return self;
}
- (BOOL)matches:(id)item {
__block int totalNumberOfCells = 0;
[item enumerateObjectsUsingBlock:^(Layout *layout, NSUInteger idx, BOOL *stop) {
totalNumberOfCells += [layout numberOfCells];
}];
return totalNumberOfCells == correctNumberOfCells;
}
- (void)describeTo:(id <HCDescription>)description {
[description appendText:@"ZOMG"];
}
@end
id <HCMatcher> hasTotalNumberOfFeedItemCells(int num){
return [[HasTotalNumberOfFeedItemCells alloc] initWithCorrectNumberOfCells:num];
}
当我尝试使用该hasTotalNumberOfFeedItemCells()
功能时,我收到警告并生成错误消息:
- 函数“hasTotalNumberOfFeedItemCells”的隐式声明在 C99 中无效
- ARC 不允许将“int”隐式转换为“id”
- 'hasTotalNumberOfFeedItemCells' 的冲突类型
任何帮助将不胜感激。