0

我正在尝试在现有应用程序上首次实施单元测试。首先,与我在教程中看到的相反,应用程序在我尝试运行单元测试时启动。我尝试在我的测试目标上将 Host App 设置为“None”,但遇到了几个与“symbols not found”错误有关的问题。

然后,即使应用程序启动,我也一直尝试运行单元测试,但我遇到了以下错误:

'NSInternalInconsistencyException',原因:'API 违规 - 多次调用 -[XCTestExpectation 实现] 用于登录用户。'

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

我的测试如下:

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,但在我的情况下不起作用。还尝试将变量设置为弱。

4

1 回答 1

0

您可以阻止正常的应用程序启动顺序发生。提供在启动应用程序进行测试时使用的不同应用程序委托。请参阅https://qualitycoding.org/ios-app-delegate-testing/

于 2018-08-23T17:41:25.853 回答