2017-03-02 48 views
0

在單元測試中,我想斷言一個有可能拋出索引超出範圍錯誤的方法實際上會拋出錯誤。如何測試Swift中的索引超出範圍?

我試圖使用

let array = [1,2,3] 
XCTAssertThrowsError(array[3])  

爲什麼不這項工作?

我該如何測試?

+0

不知道,但我想它的意思爲ErrorHandling中作爲對象符合'Error',這樣不實際的錯誤。 – Honey

+3

它不工作,因爲它沒有拋出錯誤,而是它的一個例外,這是一個完全不同的事情。 – Rob

+1

還有這個問題http://stackoverflow.com/questions/32873212/unit-test-fatalerror-in-swift有單元測試的一些方法'fatalError()' – MathewS

回答

2
let array = [1,2,3] 
XCTAssertThrowsError(array[3])  

爲什麼不這項工作?

由於指的是一個出界指數的不拋出。它崩潰,這是一個完全不同的東西。

我該如何測試?

您如何測試什麼?如果問題是擬議指標是否是合法的,一個給定的數組,使用indices.contains

let array = [1,2,3] 
let ix = 3 
XCTAssert(array.indices.contains(ix), "Index out of bounds") 
+0

我接受了,因爲這是測試索引是否超出限制的好答案,但它仍然沒有回答如何解救FatalError/crash/etc ......真的,我的問題被誤解了。 :) –

+1

你說得對,它措辭不對。你不能「拯救致命的錯誤/崩潰」,這已經在堆棧溢出已經多次處理了。這就是爲什麼我的回答表明,在您使用超出界限的表達式之前,您最好_you_來測試界限。它就像'as!'與'as'一樣'';你可以使用'as?'來測試,但如果你不這樣做並且你使用'as!'並且演員失敗了,你將會失敗_並且你_無法阻止它_。 – matt