XCTest:UI测试类中的NSUserdefaults中未检索到的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XCTest:UI测试类中的NSUserdefaults中未检索到的值相关的知识,希望对你有一定的参考价值。

我试图在应用程序中测试成功登录。

TestClass中,我在Bool中获取NSUserdefault的值,当在app中登录成功时设置为true。

代码:LoginViewController:ViewController

-(void) onGetSyncStatusChange:(SUPSyncStatusInfo*)info{
....
....

[[NSUserDefaults standardUserDefaults] setBool:true forKey:@"SynchronisationStatus"];

[[NSUserDefaults standardUserDefaults] synchronize];

}

问题:在登录期间将值设置为true,但在测试类中,它仍然给出false(默认值)。

class MarketingPadBoschUITests: XCTestCase {

    override func setUp() {....}

    override func tearDown() {...}

    func testLoginAndSync(){

    ....

    ....

    XCTAssertTrue(UserDefaults.standard.bool(forKey:   "SynchronisationStatus"),"Synchronisation Issue")

    print("Printing SynchronisationStatus :::   ",UserDefaults.standard.bool(forKey: "SynchronisationStatus"))
    }

}

任何人都可以告诉为什么在testClass中没有检索到代码中的值集?

问候,记忆

答案

UItest类无权访问应用程序的内部状态。因此,我们无法在UITest类中检索保存在应用程序代码中的UserDefault值。如果我们希望访问这些值,我们可以在UnitTest类中这样做。

在UITest类中,我设法通过在登录后在userdefault中编写自己的布尔键来检查同步状态,并在必要时检查其他测试函数中的键的状态(此键只能在UITest类中访问,而不能在外部访问)。

以上是关于XCTest:UI测试类中的NSUserdefaults中未检索到的值的主要内容,如果未能解决你的问题,请参考以下文章

iOS 中的 XCTest 和 UI 测试

XCTest 中的测试通知(UI 测试)

如何从 UI Xctest 调用 Appdelegate 的“OpenURL”功能

如何从 XCTest 中的 UI 目标调用主目标中的方法?

在 XCTest 中:如何测试函数是不是强制执行到主线程

如何使用 XCTest UI 测试区分 iOS 13 中的标题和静态文本