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

Is there a way to test an instance variable in objective c?

我需要在 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 步的最佳方法。我尝试过的方法:

请建议最好的方法是什么,其中 pros/cons 是什么。 谢谢!

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

[myViewController setValue:nil forKeyPath:@"myViewControl.window"];

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueCoding/BasicPrinciples.html#//apple_ref/doc/uid/20002170-BAJEAIEE

您可以在测试文件中添加 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;
  // ...
}