有什么方法可以测试Objective C中的实例变量吗?

问题描述 投票:0回答:1

我需要在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。
  • 使用OCMock进行嘲讽的尝试不成功。(需要进一步探索)

请建议最好的方法是什么,它们的优点是什么.谢谢!

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

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

https:/developer.apple.comlibraryarchivedocumentationCocoaConceptualKeyValueCodingBasicPrinciples.html#/apple_refdocuid20002170-BAJEAIEE。

objective-c cocoa properties instance-variables ocmock
1个回答
2
投票

你可以在你的测试文件中添加只用于测试的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;
  // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.