XCTest:在 UI 测试类的 NSUserdefaults 中未检索到值
Posted
技术标签:
【中文标题】XCTest:在 UI 测试类的 NSUserdefaults 中未检索到值【英文标题】:XCTest : Value not retrieved in NSUserdefaults in UI test Class 【发布时间】:2017-11-28 07:08:38 【问题描述】:我正在尝试在应用中测试成功登录。
在TestClass
中,我正在获取NSUserdefault
中Bool
的值,当在应用程序中登录成功时设置为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 测试中从 TextView 获取文本