2021 Developer Tools
WWDC21 · 12 min · Developer Tools
Embrace Expected Failures in XCTest
Testing is a crucial part of building a great app: Great tests can help you track down important issues before release, improve your workflow, and provide a quality experience upon release. For issues that can’t be immediately resolved, however, XCTest can help provide better context around those problems with XCTExpectFailure. Learn how this API works, its strict behavior, and how to improve the signal-to-noise ratio in your tests to identify new issues more efficiently.
Watch at developer.apple.com ↗Code shown on screen · 7 snippets
XCTSkip unless device is iPad
try XCTSkipUnless(UIDevice.current.userInterfaceIdiom == .pad, "Only supported on iPad") XCTExpectFailure
XCTExpectFailure("<https://dev.myco.com/bugs/4923> myValidationFunction is returning false") Scoped XCTExpectFailure
XCTExpectFailure("<https://dev.myco.com/bugs/4923> fix myValidationFunction") {
XCTAssert(myValidationFunction())
} XCTExpectFailure with issue matcher
let options = XCTExpectedFailure.Options()
options.issueMatcher = { issue in
return issue.type == .assertionFailure
}
XCTExpectFailure("<https://dev.myco.com/bugs/4923> fix myValidationFunction", options: options) Disable XCTExpectFailure for some platforms
let options = XCTExpectedFailure.Options()
#if os(macOS)
options.isEnabled = false
#endif
XCTExpectFailure("<https://dev.myco.com/bugs/4923> fix myValidationFunction", options: options) {
XCTAssert(myValidationFunction())
} Disable strict XCTExpectFailure behavior via options
let options = XCTExpectedFailure.Options()
options.isStrict = false
XCTExpectFailure("<https://dev.myco.com/bugs/4923> fix myValidationFunction", options: options) {
XCTAssert(myValidationFunction())
} Disable strict XCTExpectFailure behavior via parameter
XCTExpectFailure("<https://dev.myco.com/bugs/4923> fix myValidationFunction", strict: false) {
XCTAssert(myValidationFunction())
} Resources
Related sessions
-
22 min -
9 min -
9 min