webentwicklung-frage-antwort-db.com.de

Spockwurf-Ausnahmetest

Ich teste Java-Code mit Spock. Ich teste diesen 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());
}

Ich schrieb 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()
}

Und es schlägt fehl, weil AnotherCustomExceptio geworfen wird. Aber im try{}catch-Block fange ich diese Ausnahme und wirke eine CustomException, also habe ich erwartet, dass meine Methode CustomException und nicht AnotherCustomExceptio werfen wird. Wie teste ich das?

12

Ich glaube, Ihr then-Block muss repariert werden. Versuchen Sie die folgende Syntax:

then:
thrown CustomException
13
Marcos Carceles

Wenn Sie zum Beispiel die Nachricht über die ausgelöste Ausnahme auswerten möchten, können Sie Folgendes tun:

then:
def e = thrown(CustomException)
e.message == "Some Message"
0
Dave
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