2011-08-09 2 views
14

스칼라에서 BDD 용 Specs2 및 ScalaTest를 사용해 본 적이 있습니다. 나는 주어진 예외가 던져 질 수 없다고 주장 할 때 Specs2에 기대를 썼다.ScalaTest에서 "except [예외]"구문 사용

"do something" in { 
evaluating { 
    .... 
} should not produce[MyException] 
} 

을하지만이 컴파일되지 않습니다 내가 그것을하는 방법을 찾을 수 없습니다 :

"do something" in { 
{ 
    .... 
} must not(throwA[MyException]) 
} 

내가 좋아하는 ScalaTest에 상응를 쓸 수 있도록 기대했다. 그게 가능한가?

미리 감사드립니다. 방법 EvaluatingApplicationShouldWrappershouldNotWord 걸리는 과부하하는 ResultOfProduceInvocation[T] 소요 하나를 가지고 있지 않기 때문에

+0

흥미 롭습니다. 유스 케이스가 무엇인지 자세히 설명해 주시겠습니까? 좀 더 구체적인 것을 원한다고 생각합니다. 특정 예외가 발생하거나 예외를 throw해서는 안됩니다. 여러분이 말하는 것은 표현식이 정상적으로 돌아 오거나보고 싶지 않은 예외를 던질 수 있다고 주장하는 것입니다. 귀하의 유스 케이스가 의미가있는 경우 "생산하지 않음"구문을 추가 할 수 있습니다. 감사. –

+0

@Bill, 내 현재 사용 사례에 대해 조금 더 이상 생각, 나는 ScalaTest (어떤 예외가 발생하면 테스트 실패)의 기본 동작을 생각한다면 충분합니다. 감사. –

답변

7

이 ScalaTest의 최신 버전에서 직접 할 수 없습니다.

나는 원하지 않는 예외를 발생 시키므로 테스트를 통과하지 못하게하는 것이 좋습니다. 이것은 고전적인 방법입니다.

그러나 정확히 무엇이 실패했는지에 대한 명확성이 필요하다고 생각되면 try - catch 블록을 사용하여 오류를 처리 할 수 ​​있습니다. 당신은 당신이 일이하고 싶지 않은 오류를 잡을 경우, fail 메소드의 호출로 예외를 처리 :

fail("That expression shouldn't have thrown a MyExceptionType exception") 
+2

2016 년 현재 더 이상 사실이 아닙니다. Wolfram Arnold의 대답을 참조하십시오. – francoisr

+0

이렇게하면 특정 예외에서만 실패 할 수 있습니다. try-catch 및 fail() 사용 :doSomething catch { case 예 : SomeException => 실패 (SomeException을 던져서는 안 됨) 예 : } –

24

ScalaTest의 현재 버전이 지원하지 않습니다 :

noException should be thrownBy 0/1 

docs를 참조하십시오.