iOS单元测试:如何处理测试完成?

时间:2017-09-15 23:33:21

标签: ios xcode unit-testing testing xctest

我想在控制台的输出结尾处编写测试工件的路径。这会很方便。我也很好奇。

似乎XCTest以某种方式终止了app,app delegate没有收到生命周期回调,程序在main.m的main函数之前退出。

3 个答案:

答案 0 :(得分:1)

专门查看Test Execution and Observation testBundleDidFinish

如果您定义了一个采用XCTestObservation的对象,您可以在测试套件运行期间的任何时候将其添加到XCTestObservationCenter.shared实例,并在整个捆绑完成后接收呼叫。

答案 1 :(得分:0)

Jonah帮助了我,我也想在这里为其他人提供一些代码。

在任何测试之前开始观察有一个合适的方法。 测试包的Info.plist中有NSPrincipalClass个密钥。把你的“主要类”的名称(谷歌更多信息)。就我而言,它是PrincipalClass。加载测试包时,在主类中调用init。这是我的PrincipalClass

@objc(PrincipalClass)
final class PrincipalClass: NSObject {
    override init() {
        TestObservationEntryPoint.instance.startObservation()
    }
}

我能够使用Allure2制作出色的报告系统。在我提出这个问题时,报告并不是我想要的,但这是可能的,因为我找到了答案。它是XCTest中测试观察的一个很好的应用。

答案 2 :(得分:0)

对我来说,答案非常令人困惑。

func testYourTest() {
 let expectation = XCTestExpectation(description: "Your action")

 API.sharedInstance.yourRequestWithCompletionAndFailure(parameter: parameter, completion: { (response) in

 //XCTAssert with response

 expectation.fulfill()
 }) { (error) in
  //XCTAssert with your error
 expectation.fulfill()
 }

 wait(for: [expectation], timeout: 30.0)
}

期待你倾听回应。不要忘记设置超时。 更多详情/来源:https://developer.apple.com/documentation/xctest/asynchronous_tests_and_expectations/testing_asynchronous_operations_with_expectations