2017-03-02 6 views
0

유닛 테스트에서, 범위를 벗어난 인덱스를 던질 가능성이있는 메소드가 실제로 그 에러를 던집니다.Swift에서 인덱스가 범위를 벗어 났음을 어떻게 테스트 할 수 있습니까?

나는

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

를 사용하려고 해요하지 않는 이유는이 작품?

어떻게 테스트하나요?

+0

확실하지,하지만 난 이런'Error', 실제하지 오류에 부합하는 객체로는 에러 처리에 대한 의미 생각 : 문제는 제안 된 인덱스가 지정된 배열에 대한 법적 여부의 경우, indices.contains를 사용합니다. – 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])  

왜이 작동합니까?

범위를 벗어나는 색인을 참조하면 이 아니기 때문에이 throw됩니다. 이 완전히 다른 점은입니다.

어떻게 테스트하나요?

어떻게 테스트합니까? 무엇을?

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

인덱스가 범위를 벗어 났는지 여부를 테스트하기에 좋은 답변이기 때문에 받아 들였지만 여전히 FatalError/crash/etc를 구하는 방법에 대해서는 대답하지 않습니다 ... 실제로 제 질문은 잘못 표현되었습니다. :) –

+1

네가 맞아, 틀린 말로 표현했다. "치명적인 오류/충돌"을 구제 할 수는 없으며 이미 여러 번 스택 오버플로에서 처리되었습니다. 그래서 내 대답은 경계 밖의 표현을 사용하기 전에 한계를 테스트하는 것이라고 말합니다. 그것은 'as!'와 'as'같은 것입니다; 당신은'as?'테스트하지만, 당신이하지 않고'as! '를 사용하고 캐스트가 실패하면, 당신은 충돌 할 것이고 당신은 그것을 막을 수 없다. – matt