web-dev-qa-db-fra.com

Test d'exception de projection Spock

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?

12
Piotr Sobolewski

Je crois que votre bloc then doit être corrigé. Essayez la syntaxe suivante:

then:
thrown CustomException
13
Marcos Carceles
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
}
0
Ajay