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

Posted

技术标签:

【中文标题】XCTest:在 UI 测试类的 NSUserdefaults 中未检索到值【英文标题】:XCTest : Value not retrieved in NSUserdefaults in UI test Class 【发布时间】:2017-11-28 07:08:38 【问题描述】:

我正在尝试在应用中测试成功登录。

TestClass 中,我正在获取NSUserdefaultBool 的值,当在应用程序中登录成功时设置为true。

代码: LoginViewController:ViewController

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

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

[[NSUserDefaults standardUserDefaults] synchronize];


问题: 在登录期间值被设置为真,但在测试类中它是 仍然给出 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 中没有检索到代码中设置的值?

问候, 斯姆里蒂

【问题讨论】:

您可以尝试使用您的应用程序的捆绑 ID 初始化用户默认值吗?另外,您是否以正确的方式测试异步代码? 您在测试中是否致电onGetSyncStatusChange @GoodSp33d :是的,我尝试使用应用程序包 id 初始化 userdefault: NSUserDefaults *userDef = [[NSUserDefaults alloc]initWithSuiteName:@"com.infosys.marketingpadbshdevtest2"];即使发生同步,仍然会出错。我也在使用 XCTwaiter 执行异步任务。 @dasdom : onGetSyncStatusChange 方法,是在测试类中启动应用程序时执行的代码部分: XCUIApplication().launch() ,当用户登录并发生同步时调用此方法。 我已经通过在方法 onGetSyncStatusChange method() 上放置断点进行了检查,它被调用并且值也保存在 userDefault 中。但在 UITestCase 类中无法获取它。将 False 作为默认值。 【参考方案1】:

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

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

【讨论】:

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

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

iOS 中的 XCTest 和 UI 测试

在 XCTest 的 UI 测试中从 TextView 获取文本

在 XCTest UI 测试中单击 NSToolbarItem

XCTest 中查询的父母和兄弟姐妹(UI 测试)

XCTest:有没有办法在 UI 测试中通过 ID 查找任何类型的视图?