我正在尝试在现有应用程序上首次实施单元测试。首先,与我在教程中看到的相反,该应用程序是在我尝试运行单元测试时启动的。我曾尝试在测试目标上将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,但在我的情况下不起作用。还尝试将变量设置为弱。
答案 0 :(得分:0)
您可以防止正常的应用启动顺序发生。提供启动应用程序进行测试时使用的其他应用程序委托。参见https://qualitycoding.org/ios-app-delegate-testing/