2010-11-21 12 views
7

Estoy usando ScalaTest para probar algún código de Scala. actualmente pruebas para las excepciones previstas con código como esteCómo probar propiedades adicionales de excepciones esperadas usando ScalaTest

import org.scalatest._ 
import org.scalatest.matchers.ShouldMatchers 

class ImageComparisonTest extends FeatureSpec with ShouldMatchers{ 

    feature("A test can throw an exception") { 

     scenario("when an exception is throw this is expected"){ 
      evaluating { throw new Exception("message") } should produce [Exception] 
     } 
    } 
} 

Pero me gustaría añadir comprobación adicional de la excepción, por ejemplo, Me gustaría comprobar que el mensaje de excepciones contiene una determinada cadena.

¿Existe una forma "limpia" de hacerlo? ¿O tengo que usar un bloque try catch?

Respuesta

16

he encontrado una solución

val exception = intercept[SomeException]{ ... code that throws SomeException ... } 
// you can add more assertions based on exception here 
9

Usted puede hacer el mismo tipo de cosa con la evaluación ... debe producir la sintaxis, porque intercepción como, devuelve la excepción capturada:

val exception = 
    evaluating { throw new Exception("message") } should produce [Exception] 

Luego inspecciona la excepción.

+0

Funciona y me gusta t su sintaxis: está en línea con todos los "debería ser" para los resultados de la función. –

+0

'evaluation 'está en desuso en 2.x y eliminado en 3.x. Los documentos de depreciación aconsejan utilizar 'an [Exception] should throwwnBy' en su lugar. Sin embargo, 3.0.0-M14 devuelve una 'Afirmación': 'val ex: Assertion = an [Exception] debe lanzarseBy {throw new Exception (" boom ")}'. ¿Hay alguna manera de recuperar la 'Excepción' lanzada? – kostja

2

Si necesita inspeccionar además una excepción esperada, puede capturar usando la siguiente sintaxis:

val thrown = the [SomeException] thrownBy { /* Code that throws SomeException */ } 

Esta expresión devuelve la excepción capturada para que pueda inspeccionarlo más:

thrown.getMessage should equal ("Some message") 

también puede capturar e inspeccionar una excepción esperada en una declaración, como esta:

the [SomeException] thrownBy { 
    // Code that throws SomeException 
} should have message "Some message" 
Cuestiones relacionadas