如何对强制展开进行单元测试

Dan*_*kin 2 xctest swift swift2

在带有 XCTest 的 Swift 中,是否可以测试强制展开的结果?我希望有像茉莉花那样的东西expect(...).toThrow()

let a: Something? = MAYBE_NIL_MAYBE_NOT

func unwrap()
{
    a!
}

XCTAssertCausesError(unwrap)
Run Code Online (Sandbox Code Playgroud)

pka*_*amb 7

使用新的XCTUnwrap来解包一个对象,并在值为 nil 时断言。

\n
let optional: String? = "optional"\nlet unwrapped: String = try XCTUnwrap(optional) // throws\n
Run Code Online (Sandbox Code Playgroud)\n

在非抛出函数中,您可以使用guard测试失败的单行代码,如下所示:

\n
guard let unwrapped = try? XCTUnwrap(optional) else { return }\n
Run Code Online (Sandbox Code Playgroud)\n

这本质上与测试强制展开相同。只需使用该功能而不是!.

\n
\n

XCTUnwrap断言可选变量\xe2\x80\x99s 值不为零,如果断言成功则返回其值。

\n

XCTAssertNotNil(_:_:file:line:)这消除了在测试的其余部分中结合解包值或处理条件链接的需要。例如:

\n
\n
func testFirstNameNotEmpty() throws {\n    let forenames: [String] = customer.forenames\n\n    let firstName =  try XCTUnwrap(forenames.first)\n    XCTAssertFalse(firstName.isEmpty)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

在 WWDC 2019 和 Xcode 11 发行说明中宣布:
\n https://developer.apple.com/documentation/xcode_release_notes/xcode_11_release_notes

\n