使用 XCTest 在单元测试中获取变量的 nil 值

Posted

技术标签:

【中文标题】使用 XCTest 在单元测试中获取变量的 nil 值【英文标题】:Getting nil value for the variable in Unit Test using XCTest 【发布时间】:2014-02-03 15:01:25 【问题描述】:

appDelegate 实例显示 nil 值,测试用例“testAppDelegate”失败。 苹果开发者网站提供的示例代码也是如此,但正在使用 SenTestCase,请帮帮我,即使目标是根据 WWDC 2013 视频"Testing in Xcode 5 session 409"

@interface Tests : XCTestCase

    AppDelegate *appDelegate;
    AppViewController *appVC;
    UIView *appView;

@end

@implementation Tests

- (void)setUp

    [super setUp];
    appDelegate = [[UIApplication sharedApplication] delegate];
    appVC = appDelegate.appViewController;
    appView = appVC.view;

 

 - (void)tearDown
 
     [super tearDown];
 

 - (void)testAppDelegate

    XCTAssert(appDelegate, @"Cannot find the application delegate");


- (void)testCheckForViewInitializatio

    XCTAssert(appVC, @"AppViewController initialized");

【问题讨论】:

【参考方案1】:

试试这个:

转到项目设置 选择您的测试目标General标签切换Target部分到您的主要目标

再次运行

【讨论】:

按照你说的这样做之后,应用程序正在模拟器上启动应用程序而不是测试应用程序。控制台上没有 cmets。 @user24991 也许你是 Run (Product->Run) 而不是 Test (Product->测试)?【参考方案2】:

安东给出了正确的建议。 但如果它不起作用(如我的情况)尝试:

    删除现有的测试目标

    创建新的测试目标(左窗格中的第 5 个选项卡 -> 点击左下角的 + -> 新测试目标)和

    在出现的窗口中不要忘记选择您的应用程序作为测试目标。

    将所有 TestCases 文件添加到新目标。

我不知道原因,但是在此操作之后,当我使用新目标运行测试时,它开始正常工作。

【讨论】:

以上是关于使用 XCTest 在单元测试中获取变量的 nil 值的主要内容,如果未能解决你的问题,请参考以下文章

用于单元测试 Objective-C XCTest 的 .m 文件中的访问变量定义

XCTestAssertNil 由于“nil”参数而崩溃

XCTest:显示带有标签的验证视图

使用 XCTest 在单元测试期间接收通知?

如何对强制展开进行单元测试

iOS:使用 XCTest 对 UIViewController 组件进行单元测试