Spocklight: Check No Exceptions Are Thrown At All
In a previous post we learned that we can check a specific exception is not thrown in our specification with the notThrown
method.
If we are not interested in a specific exception, but just want to check no exception at all is thrown, we must use the noExceptionThrown
method.
This method return true
if the called code doesn't throw an exception.
In the following example we invoke a method (cook
) that can throw an exception.
We want to test the case when no exception is thrown:
package com.mrhaki.blog
@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
import spock.lang.Specification
class RecipeServiceSpec extends Specification {
def """If the recipe is cooked on the right device and
for the correct amount of minutes,
then no exception is thrown"""() {
setup:
def recipeService = new RecipeService()
def recipe = new Recipe(device: 'oven', time: 30)
when:
recipeService.cook(recipe, 30, 'oven')
then: 'no exceptions must be thrown'
noExceptionThrown()
}
}
class RecipeService {
def cook(Recipe recipe, int minutes, String device) {
if (minutes > recipe.time) {
throw new BurnedException()
}
if (device != recipe.device) {
throw new InvalidDeviceException("Please use $recipe.device for this recipe.")
}
}
}
class Recipe {
int time
String device
}
import groovy.transform.InheritConstructors
@InheritConstructors
class BurnedException extends RuntimeException {
}
@InheritConstructors
class InvalidDeviceException extends RuntimeException {
}
Written with Spock 1.0-groovy-2.4.