2011-08-09 13 views
14

Estoy jugando con Specs2 y ScalaTest para BDD en Scala. He escrito expectativas en Specs2 cuando afirmo que una excepción determinada no debe arrojarse.Usando la sintaxis "NO DEBE producir [excepción]" en ScalaTest

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

Tenía la esperanza de ser capaz de escribir el equivalente en ScalaTest como:

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

Pero esto no compila y no podía encontrar manera de hacerlo. ¿Es eso posible?

Muchas gracias de antemano.

+0

Interesante. ¿Puedes dar más detalles sobre el caso de uso? Creo que querrías algo más específico. O bien debe arrojar una excepción particular o no debe arrojar ninguna excepción. Lo que está diciendo es que quiere afirmar que la expresión puede regresar normalmente o arrojar cualquier excepción, excepto la que no desea ver. Si su caso de uso tiene sentido, puedo agregar la sintaxis "no producir". Gracias. –

+0

@Bill, habiendo pensado un poco más acerca de mi caso de uso actual, creo que el comportamiento predeterminado de ScalaTest (fallar la prueba si se produce alguna excepción) si es suficiente. Gracias. –

Respuesta

7

esto no es posible directamente en la versión más reciente de ScalaTest porque el método should de EvaluatingApplicationShouldWrapper no tiene una sobrecarga que toma un NotWord, sólo uno que toma un ResultOfProduceInvocation[T].

Sugeriría dejar pasar la excepción indeseada, que no pasará la prueba. Esta es la forma clásica.

Pero si cree que necesita más claridad acerca de qué falló exactamente, podría usar un bloque try - catch para manejar el error. Si se coge el error que no quiere que suceda, manejar la excepción con una llamada al método fail:

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

A partir de 2016, esto ya no es cierto. Ver la respuesta de Wolfram Arnold. – francoisr

+0

De esta forma, solo es posible fallar en una excepción específica. Uso de try-catch y fail(): '' 'try { doSomething() } catch { case ex: SomeException => fail (" No debería lanzar SomeException ", ej) }' '' –

24

La versión actual de ScalaTest es compatible con esta:

noException should be thrownBy 0/1 

Ver docs.

Cuestiones relacionadas