OCUnit 在私有财产上

Posted

技术标签:

【中文标题】OCUnit 在私有财产上【英文标题】:OCUnit on private properties 【发布时间】:2013-09-01 18:30:12 【问题描述】:

我是测试驱动开发的新手,有一个基本问题。如何访问私有属性以进行单元测试?关于如何访问方法有很多答案,但我在属性上找不到太多答案。这是我现在为我的课程 CDTest 准备的内容。为了便于阅读,排除了一些导入的标头。

CDTest.h

@interface CDTest : NSObject

@end

CDTest.m

#import "CDTest.h"
#import "CDTest+Protected.h"

@interface CDTest()

@property (strong, nonatomic) NSManagedObjectContext *context;

@end

@implementation CDTest

- (void)setup

    //Sets up the context


@end

CDTest+Protected.h

@interface CDTest()

- (void)setup;

@end

单元测试.m文件

#import "CDTest.h"
#import "CDTest+Protected.h"

@implementation CDTestTests

    CDTest *cdTest;


- (void)setUp

    [super setUp];
    cdTest = [CDTest new];


- (void)testSetup

    [cdTest setup];
    //Now I need access to the properties in cdTest to validate them


@end

【问题讨论】:

想要通过测试访问私有属性是一种代码味道。尝试完全通过您的公共 API 进行测试。如果你说,“但我真的需要这个”,听听你的测试:另一个班级正试图离开。见qualitycoding.org/testability-vs-hiding 【参考方案1】:

在 Objective-C 中,属性是方法(每个属性都是 getter 和 setter,如果它是读/写的)。

只需在受保护的类别中声明您的财产,应该像这样声明

@interface CDTest(Protected)

- (void)setup;
@property (strong, nonatomic) NSManagedObjectContext *context;

@end

【讨论】:

呃!不敢相信我错过了。谢谢。

以上是关于OCUnit 在私有财产上的主要内容,如果未能解决你的问题,请参考以下文章

在我的 XCode 3 上安装 OCUnit 时出现问题

OCUnit 是不是允许在 iPhone 模拟器上运行应用程序测试?

Xcode 的 OCUnit 测试能否在 iOS 设备而不是模拟器上运行

OCUnit - 测试用例失败时中断?

如何在单元测试(OCUnit)中访问 NSDocumentDirectory

在 OCUnit 中使用属性是不是安全?