Estoy escribiendo algunas pruebas usando HUnit y me gustaría afirmar que una función en particular arroja una excepción dado una entrada determinada. No puedo encontrar una función afirmar que proporciona la funcionalidad requerida. Alguien sabe de un marco de prueba que hace?¿Hay una assertException en cualquiera de los frameworks de prueba Haskell?
Respuesta
Aunque HUnit no viene con ninguna afirmación de excepción, es fácil de escribir su propia:
import Control.Exception
import Control.Monad
import Test.HUnit
assertException :: (Exception e, Eq e) => e -> IO a -> IO()
assertException ex action =
handleJust isWanted (const $ return()) $ do
action
assertFailure $ "Expected exception: " ++ show ex
where isWanted = guard . (== ex)
testPasses = TestCase $ assertException DivideByZero (evaluate $ 5 `div` 0)
testFails = TestCase $ assertException DivideByZero (evaluate $ 5 `div` 1)
main = runTestTT $ TestList [ testPasses, testFails ]
Puede hacer algo más elegante como el uso de un predicado en lugar de comparación explícita si lo desea.
$ ./testex
### Failure in: 1
Expected exception: divide by zero
Cases: 2 Tried: 2 Errors: 0 Failures: 1
Tenga en cuenta que evaluate
aquí podría obtener optimizado de distancia (ver GHC billete #5129), pero para probar el código en el IO
mónada esto debería funcionar bien.
Puede usar assertRaises
desde testpack.
Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. – sschaef
@sschaef Disculpe, novato de Haskell aquí. ¿Por qué no es la respuesta de 'testRaises' de testpack a la pregunta? – akaihola
@akaihola: Ok, no estaba claro. Proporciona una respuesta, pero solo un enlace, que no es muy bienvenida en SO. – sschaef
hspec (o más precisamente hspec-expectations) tiene shouldThrow
.
- 1. ¿Hay consenso sobre los frameworks de prueba para Ruby 1.9.x?
- 2. ¿Hay bibliotecas/frameworks para SCons?
- 3. multiprocesamiento El grupo se bloquea cuando hay una excepción en cualquiera de los hilos
- 4. Encapsulación en la era de los frameworks
- 5. Haskell primer prueba
- 6. ¿Hay un equivalente en Python del "cualquiera" de Ruby? ¿función?
- 7. Flujo de trabajo de prueba de Haskell
- 8. ¿Cómo funcionan los frameworks simulados?
- 9. Grails obtener cualquiera de los niños en un hasMany
- 10. ¿Hay una mejor manera de tener argumentos opcionales en Haskell?
- 11. ¿Hay algún tipo 'Any' en haskell?
- 12. ¿Cómo funcionan los frameworks de burlarse de Java?
- 13. Prueba simple de la unidad haskell
- 14. ¿Hay una función haskell para las fechas?
- 15. ¿Ya está disponible ECMAScript 5 en cualquiera de los navegadores?
- 16. ¿Hay una inversa del operador Haskell $?
- 17. Cómo son limitados los frameworks web
- 18. ¿Cuáles son los grandes frameworks web hoy?
- 19. ¿Hay algún complemento de prueba de seguridad para los rieles?
- 20. Programación Web Frameworks Generación "//" para los enlaces
- 21. Haskell: prueba si la lista contiene una "sublista" específica
- 22. ¿Son compatibles los subtítulos en cualquiera de los controles de video nativos?
- 23. PyXB y python frameworks
- 24. Cómo separar el código de producción y prueba en Haskell
- 25. Haskell Mapa de los Árboles
- 26. "frameworks de sitios" en una sola instancia de django
- 27. ¿Cuáles son los frameworks de terceros de iPhone más útiles?
- 28. ¿Cuáles son los mejores frameworks de redes sociales de Java?
- 29. Verificando CheckBoxList tiene cualquiera de los valores seleccionados
- 30. ¿Hay algún entorno de prueba SQL 'basado en la web'?
Buen ejemplo. Aquí hay una versión modificada que imprime si no hay una excepción o si se trata de otra excepción http://stackoverflow.com/a/33266991/3029422 – Ionut