如何使用自定义对象 XCTAssertEqual NSArray?

Posted

技术标签:

【中文标题】如何使用自定义对象 XCTAssertEqual NSArray?【英文标题】:How to XCTAssertEqual NSArray with custom objects? 【发布时间】:2014-06-24 12:10:39 【问题描述】:

这是我的 h 文件

@class TBL_CardView;

@interface TBL_CardsOnTableView: NSObject

- (CGPoint) addCard:(TBL_CardView *)cardView didFailWithError:(NSError **)error;
- (unsigned int) numberOfCardOnTable;

- (NSArray*) cardsOnTableWithPosition;

@end

@interface TBL_CardOnTableWithPosition: NSObject

- (instancetype)initWithCardView:(TBL_CardView*) cardView  withPosition:(NSUInteger) position;

@property(readonly) TBL_CardView*  card;
@property(readonly) NSUInteger position;

@end

在我做的m文件中

- (NSArray*) cardsOnTableWithPosition

    return (NSArray*) _cardsOnTable;

_cardsOnTable 是

NSMutableArray *_cardsOnTable;
_cardsOnTable = [[NSMutableArray alloc] initWithCapacity:8];

然后我用这段代码添加新对象:

TBL_CardOnTableWithPosition* cvwp = [[TBL_CardOnTableWithPosition alloc] initWithCardView:cardView withPosition:avalableLocation] ;

[_cardsOnTable addObject:cvwp];

这就是我在单元测试中的测试方式

[table cardsOnTableWithPosition];
TBL_CardOnTableWithPosition* cvwp1 = [[TBL_CardOnTableWithPosition alloc] initWithCardView:cardView1 withPosition:1] ;
NSLog(@"%@", [table cardsOnTableWithPosition]);

NSArray* array = [table cardsOnTableWithPosition];
NSArray * a = [[NSArray alloc] initWithArray:@[cvwp1]];
NSArray * d = [table cardsOnTableWithPosition];
XCTAssertEqual(a, d); // FAILD, but this I am expecting to failed 
XCTAssertEqualObjects(a, d);  // FAILD
XCTAssertEqualObjects(@[cvwp1], [table cardsOnTableWithPosition]);  // FAILD

XCTAssertTrue([a isEqualToArray:d]); // FAILD

在调试器中对象 a 和 d 是相同的,但我可以找到如何在单元测试中对其进行测试的方法。 知道为什么吗?

【问题讨论】:

【参考方案1】:

我发现了问题。

我需要实现 - (BOOL)isEqual:(id)object 在我的自定义对象中。

【讨论】:

别忘了实现-hash

以上是关于如何使用自定义对象 XCTAssertEqual NSArray?的主要内容,如果未能解决你的问题,请参考以下文章

带有 AnyObject 参数的通用 XCTAssertEqual?

在 XCTAssertEqual 中使用 Foundation Decimal 类型

比较单元测试中的 swift Type 值 - XCTAssertEqual vs ==

XCTAssertEqual with Optional (not Equatable)

找不到接受类型参数列表的 XCTAssertEqual 的重载 ([String : AnyObject], [String : AnyObject])

Quickblox:如何使用分页来使用 Web SDK 获取自定义对象