XCUITest:调用的测试函数中的断言不起作用

Posted

技术标签:

【中文标题】XCUITest:调用的测试函数中的断言不起作用【英文标题】:XCUITest: Assertions in called test functions not working 【发布时间】:2016-01-29 10:37:13 【问题描述】:

是否可以使用有效的 XCTest 断言从另一个测试用例调用测试函数?

-(void)testExample 

    XCUIApplication *app = [[XCUIApplication alloc] init];

    TestLoginMethod *loginModule = [[TestLoginMethod alloc] init:app];
    [loginModule testExampleLogin];

我想编写测试模块以便于重用或以不同的顺序调用它们。 但是我在被调用函数中的 XCTAssert 如果为假,则不会中止测试。

- (void)testExampleLogin

XCUIElement *passwordSecureTextField = app.secureTextFields[@"Passwordaadsfs"];
XCTAssertTrue([passwordSecureTextField exists]);
XCTAssertTrue([passwordSecureTextField isHittable]);

在被调用的函数中,XCTAssertTrue 只是被跳过了,尽管这个文本字段不存在。

【问题讨论】:

测试用例应该是独立的。在你的情况下 id 制作:--- -(void)testExample [loginModuleHelper login]; -(void) testExampleLogin [loginModuleHelper login]; ... -(void) login XCUIElement *passwordSecureTextField = app.secureTextFields[@"Passwordaadsfs"]; XCTAssertTrue([passwordSecureTextField exists]); XCTAssertTrue([passwordSecureTextField isHittable]); 您可能会发现关于线程 link 的讨论很有用。 【参考方案1】:

与其将共享逻辑放入测试中,不如将该逻辑分解为非测试函数,即:

- (void) login 
    // Do login
    XCTAssert(YES);


- (void) testLogin 
    [self login];


- (void) testExample 
   [self login];
   // do some other stuff
   XCTAssert(YES);

当您从其他测试中调用以 test 开头的函数时,Xcode 会遇到问题,但不在乎您在非测试函数中是否有通用测试逻辑。

【讨论】:

以上是关于XCUITest:调用的测试函数中的断言不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 XCUITest 中使用条件似乎不起作用

单击 XCUITest 中的按钮后,如何验证和断言是不是正在播放动画?

iOS:XCUITest 中的模拟器位置不起作用

Xcode 11 Export for Localization 不起作用,Include Screenshots 功能被禁用,并且在测试日志中找不到 XCUITest 屏幕截图附件

Solidity:使用 waffle + chai 测试恢复的断言不起作用

如何修复在 XCUITest 中等待应用空闲的问题