Je teste le code Java avec Spock. Je teste ce code:
try {
Set<String> availableActions = getSthAction()
List<String> goodActions = getGoodAction()
if (!CollectionUtils.containsAny(availableActions ,goodActions )){
throw new CustomException();
}
} catch (AnotherCustomExceptio e) {
throw new CustomException(e.getMessage());
}
J'ai écrit test:
def "some test"() {
given:
bean.methodName(_) >> {throw new AnotherCustomExceptio ("Sth wrong")}
def order = new Order();
when:
validator.validate(order )
then:
final CustomException exception = thrown()
}
Et cela échoue parce que AnotherCustomExceptio
est lancé. Mais dans le bloc try{}catch
, j'attrape cette exception et lance une CustomException
. Je m'attendais donc à ce que ma méthode jette CustomException
et non AnotherCustomExceptio
. Comment puis-je le tester?
Je crois que votre bloc then
doit être corrigé. Essayez la syntaxe suivante:
then:
thrown CustomException
def "Exception Testing 1"(){
given :
def fooObject = mock(Foo);
when:
doThrow(RuntimeException).when(fooObject).foo()
then:
thrown RuntimeException
}
def "Exception Testing 2"(){
given :
def fooObject = Mock(Foo);
when:
when(fooObject.foo()).thenThrow(RuntimeException)
then:
thrown RuntimeException
}