我需要在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
}
我想知道在测试中实现第二步的最佳方法。我试过的方法。
- (void)setMyView:(NSView*)myView
只是为了单元测试的目的,并在myTest中使用,我感觉这不是一个好办法。myView
财产,并将其放入 myViewController.h
这样我就可以在没有明确定义的情况下拥有一个setter。请建议最好的方法是什么,它们的优点是什么.谢谢!
编辑 : 我最后在测试文件中使用的答案。
[myViewController setValue:nil forKeyPath:@"myViewControl.window"];
你可以在你的测试文件中添加只用于测试的setter。myViewControllerTest.mm
这对你的生产代码没有影响。
就像下面使用扩展名
// Write this in test file.
@interface MyViewController(Test)
- (void)setMyView:(NSView *)myView;
@end
或只用 valueForKey:
以获得私人领域。
-(void) myTest
{
id myViewController = ...;
NSView *myView = [myViewController valueForKey:@"myView"];
myView.window = nil;
// ...
}