Objective c 如何在objective C单元测试中检查私有成员?

Objective c 如何在objective C单元测试中检查私有成员?,objective-c,xcode,unit-testing,Objective C,Xcode,Unit Testing,考虑到这一类: @interface SampleClass : NSObject { NSMutableArray *_childs; } - (void)addChild:(ChildClass *)child; - (void)removeChild:(ChildClass *)child; @end 如果_childs数组包含一个对象而不添加属性来访问它(因为我不希望允许客户端代码访问_childs数组),我如何测试添加子对象的时间 只需创建一个返回数组计数的-(int)c

考虑到这一类:

@interface SampleClass : NSObject {
    NSMutableArray *_childs;
}

- (void)addChild:(ChildClass *)child;
- (void)removeChild:(ChildClass *)child;

@end

如果_childs数组包含一个对象而不添加属性来访问它(因为我不希望允许客户端代码访问_childs数组),我如何测试添加子对象的时间

只需创建一个返回数组计数的-(int)childCount方法。

在类扩展中为其创建一个
@property
,并将该属性用于所有访问,这样您就可以测试并使用相同的代码。

我不确定我是否正确理解了您的问题,我将其解析为:在实现
addChild:
时,如何防止再次将对象插入
\u childs

有两种方法:如果元素的顺序无关紧要,那么只需使用a而不是
NSMutableArray
。在这种情况下,集合会处理所有事情:

- (void)addChild:(ChildClass *)child
{
    [_childs addObject:child];
}
如果顺序很重要,请使用
NSMutableArray
并按如下方式操作:

- (void)addChild:(ChildClass *)child
{
    if ([_childs containsObject:child]) return;

    [_childs addObject:child];
}

目标C没有“私人成员”;它有实例变量。相似,但不完全相同。是的,残缺不全的C++词汇;你越快放弃C++的复杂性,并接受Objtovi-C的简单性,你就可以更快地应用你的应用程序……)(严肃地说,我已经教了几百年的开发人员Objy-C,这些最困难的两组是C++和java程序员,他们假设Objc工作的方式相同——不是说你正在做……只是一个观察)。把这个方法放在类扩展中。是的,但是用这种方法,我只需要修改我的类来测试它,我不需要在我的客户端代码中使用childCount方法。谢谢,这是我见过的最好的方法。代码只是一个例子,这是在单元测试中访问实例变量而不修改我想知道的代码的概念