Objective c 有没有办法在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
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
仅用于单元测试,并在myTest中使用它。 我觉得这不是一个好办法-(void)setMyView:(NSView*)myView
- 将
作为属性,并将其放入myView
中,这样我就有了一个setter,而无需显式定义一个settermyViewController.h
- 尝试使用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的维护者,我对这个答案投了赞成票。这似乎比试图模仿访问者更明智。