Objective c 有没有办法在objective c中测试实例变量?

Objective c 有没有办法在objective c中测试实例变量?,objective-c,cocoa,properties,instance-variables,ocmock,Objective C,Cocoa,Properties,Instance Variables,Ocmock,我需要在Objective C中测试一个实例变量 我在myViewController.m @implementation myViewController { NSView *myView; } 我需要在myViewControllerTest.mm中添加一个测试,当myView.window恰好是nil -(void) myTest { // 1. assert condition 1 is true // 2. mock myView.window and set it to nil

我需要在Objective C中测试一个实例变量

我在
myViewController.m

@implementation myViewController
{
NSView *myView;
}
我需要在
myViewControllerTest.mm
中添加一个测试,当
myView.window
恰好是
nil

-(void) myTest 
{
// 1. assert condition 1 is true
// 2. mock myView.window and set it to nil OR set myView.window directly to nil
// 3. assert condition 1 is false
}
我想知道在测试中实现步骤2的最佳方法。我尝试过的方法:

  • 添加一个显式setter
    -(void)setMyView:(NSView*)myView
    仅用于单元测试,并在myTest中使用它。 我觉得这不是一个好办法
  • myView
    作为属性,并将其放入
    myViewController.h
    中,这样我就有了一个setter,而无需显式定义一个setter
  • 尝试使用OCMock进行模拟失败。(需要进一步探讨)
请建议最好的方法是什么以及它们的优点/缺点是什么。 谢谢

编辑:我在测试文件中使用的答案。

[myViewController设置值:nil forKeyPath:@“myViewControl.window”]


您只能在测试文件
myViewControllerTest.mm

这对生产代码没有影响

下面使用扩展名

//将其写入测试文件。
@接口MyViewController(测试)
-(void)setMyView:(NSView*)myView;
@结束
或者只需使用
valueForKey:
获取私有字段

-(无效)myTest
{
id myViewController=。。。;
NSView*myView=[myViewController valueForKey:@“myView”];
myView.window=nil;
// ...
}

您只能在测试文件
myViewControllerTest.mm

这对生产代码没有影响

下面使用扩展名

//将其写入测试文件。
@接口MyViewController(测试)
-(void)setMyView:(NSView*)myView;
@结束
或者只需使用
valueForKey:
获取私有字段

-(无效)myTest
{
id myViewController=。。。;
NSView*myView=[myViewController valueForKey:@“myView”];
myView.window=nil;
// ...
}

作为OCMock的维护者,我对这个答案投了赞成票。似乎比试图模拟访问器更明智。作为OCMock的维护者,我对这个答案投了赞成票。这似乎比试图模仿访问者更明智。