2017-03-02 45 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