测试在应用启动时发生的API调用会导致多个调用得以实现

时间:2018-08-23 15:48:31

标签: swift xcode xctest xctestexpectation

我正在尝试在现有应用程序上首次实施单元测试。首先,与我在教程中看到的相反,该应用程序是在我尝试运行单元测试时启动的。我曾尝试在测试目标上将Host App设置为“ None”,但遇到了一些与“找不到符号”错误有关的问题。

然后,即使在应用启动时,我仍然尝试运行单元测试,但是遇到以下错误:

  

“ NSInternalInconsistencyException”,原因:“ API违规-对Did用户登录多次调用-[XCTestExpectation履行]。”

我的猜测是我的测试登录了用户并达到了对委托的期望,但是应用程序本身启动时正在登录用户,因此“ fulfill”被调用了两次。

我的测试如下:

func testLogInUser() {
   UserManager.loginDelegate = self
   expectation = expectation(description: "Did log in user")
   UserManager.logInUser(withEmail: "jacobo@viewer.com", password: "jacobo123")
   waitForExpectations(timeout: 10.0)
}

//Delegate Method
func didLogIn(user: User) {
    XCTAssertEqual(user.email, "jacobo@viewer.com")
    XCTAssertNotNil(user.uid)
    XCTAssertNotEqual(user.type, .guest)
    expectation?.fulfill() //Crashes here
}

因此,我正在寻找一种解决方案,要么让我无需运行应用程序就运行测试和API调用,要么以某种方式避免多次被调用。

SO中有一个答案,建议使用后将“期望”设置为nil,但在我的情况下不起作用。还尝试将变量设置为弱。

1 个答案:

答案 0 :(得分:0)

您可以防止正常的应用启动顺序发生。提供启动应用程序进行测试时使用的其他应用程序委托。参见https://qualitycoding.org/ios-app-delegate-testing/