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

发布于 2024-12-10 00:12:44 字数 271 浏览 0 评论 0原文

考虑此类:

@interface SampleClass : NSObject {
    NSMutableArray *_childs;
}

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

@end

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

Considering this class :

@interface SampleClass : NSObject {
    NSMutableArray *_childs;
}

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

@end

How can i test when i add a child if the _childs array contains one object without adding a property to access it (because i don't want allow client code to access the _childs array) ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

可遇━不可求 2024-12-17 00:12:44

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

Create a @property for it in the class extension and use the property for all accesses, that way you are testing and using the same code.

隐诗 2024-12-17 00:12:44

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

有两种方法:如果元素的顺序并不重要,那么您应该简单地使用 NSMutableSet 而不是 NSMutableArray。在这种情况下,该集合会处理所有事情:

- (void)addChild:(ChildClass *)child
{
    [_childs addObject:child];
}

如果顺序很重要,请坚持使用NSMutableArray并执行以下操作:

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

    [_childs addObject:child];
}

I'm not sure I correctly understand your question, I parse it as: While implementing addChild:, how do I prevent to insert objects a second time into _childs ?

There are two ways: if the order of your elements doesn't matter then you should simply use a NSMutableSet instead of an NSMutableArray. In this case the set takes care of everything:

- (void)addChild:(ChildClass *)child
{
    [_childs addObject:child];
}

If order is important, stick with the NSMutableArray and do it like this:

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

    [_childs addObject:child];
}
没企图 2024-12-17 00:12:44

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

Just make a -(int)childCount method that returns the count of the array.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文