-
Added
XCTUnimplemented
, a function for constructing "unimplemented" closures that callXCTFail
when invoked.Helpful for stubbing dependencies held in value types. For example, a common use of XCTest Dynamic Overlay:
struct FactClient { var fetch: (Int) async throws -> String } extension FactClient { struct Unimplemented: Error { let endpoint: String } static let unimplemented = Self( fetch: { _ in XCTFail("Unimplemented: \(Self.self).fetch") throw Unimplemented(endpoint: "\(Self.self).fetch") } ) }
Can be simplified using
XCTUnimplemented
:extension FactClient { static let unimplemented = Self( fetch: XCTUnimplemented("\(Self.self).fetch") ) }
-
Changed:
XCTFail
now causes a runtime warning when called outside of tests.