【发布时间】:2018-02-25 04:22:49
【问题描述】:
我想在控制台的输出末尾写入测试工件的路径。这会很方便。我也只是好奇。
XCTest 似乎以某种方式终止了应用程序,应用程序委托没有收到生命周期回调,程序在 main.m 的主函数之前退出。
【问题讨论】:
标签: ios xcode unit-testing testing xctest
我想在控制台的输出末尾写入测试工件的路径。这会很方便。我也只是好奇。
XCTest 似乎以某种方式终止了应用程序,应用程序委托没有收到生命周期回调,程序在 main.m 的主函数之前退出。
【问题讨论】:
标签: ios xcode unit-testing testing xctest
对我来说,答案非常令人困惑。
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
【讨论】:
Jonah 帮助了我,我也想在这里为其他人放置一些代码。
要在任何测试之前开始观察,有一个适当的方法可以做到这一点。
测试包的 Info.plist 中有 NSPrincipalClass 键。把你的“主要班级”的名字放在那里(谷歌它以获取更多信息)。就我而言,它是PrincipalClass。加载测试包时,在主体类中调用init。这是我的PrincipalClass:
@objc(PrincipalClass)
final class PrincipalClass: NSObject {
override init() {
TestObservationEntryPoint.instance.startObservation()
}
}
我能够用 Allure2 制作很酷的报告系统。在我提出这个问题时,我并不想要报告,但因为我找到了答案,所以才有可能。这是XCTest中测试观察的一个很好的应用。
【讨论】:
看看Test Execution and Observation,特别是testBundleDidFinish。
如果您定义一个采用 XCTestObservation 的对象,您可以在测试套件运行期间的任何时候将其添加到 XCTestObservationCenter.shared 实例中,并在整个捆绑包完成时收到调用。
【讨论】: