单元测试错误抛出一个块

时间:2017-07-14 09:10:30

标签: ios swift error-handling compiler-errors compiler-warnings

在以下情况中,我面临一些警告问题:

let expect = expectation(description: "Async network call")
SomeManager.executeCall { result in
    do {
        /// 1.
        XCTAssertThrowsError(try CoreManager.method())
        expect.fulfill()
    } catch {}
}

waitForExpectations(timeout: 15.0, handler: nil)

在1.编译器给出错误

  

catch块无法访问,因为do block

中没有抛出任何错误

如果我删除了do-catch,则会出现错误:

  

从投掷函数类型到非投掷函数类型的转换无效...

2 个答案:

答案 0 :(得分:0)

XCTAssertThrowsError的调用会吞下错误,因此您不需要执行do / catch。 对我来说看起来像个错误。 作为一种解决方法尝试包装像这样的检查功能

func mustThrow() {
   XCTAssertThrowsError(try CoreManager.method())
}

然后致电

SomeManager.executeCall { result in
    /// 1.
    mustThrow()
    expect.fulfill()
}

您可以在测试中本地定义函数,以避免污染文件中的名称。

答案 1 :(得分:0)

Swift 3和4

对于迟来的答复,我感到抱歉,但是为了使<div id="app"> <select v-model="selected"> <option v-for="option in options" v-bind:value="option.value">{{option.text}}</option> </select> <span>Selected: {{ selected }}</span> </div> let app = new Vue({ el: '#app', data: { selected: ['A', 'B', 'C'], options: [ { text: 'One', value: 'A' }, { text: 'Two', value: 'B' }, { text: 'Three', value: 'C' }, { text: 'Any', value: ['A', 'B', 'C'] }, ] } }); XCTAssertNoThrow正常工作(即没有XCTAssertThrowsError),抛出测试方法必须处于一个障碍之中。 / p>

因此,您的代码将变成,请注意{}:

do{}catch{}