web-dev-qa-db-ja.com

スポックスロー例外テスト

私はJava Spockでコードをテストします。このコードをテストします:

 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());
}

私はテストを書いた:

def "some test"() {
    given:
    bean.methodName(_) >> {throw new AnotherCustomExceptio ("Sth wrong")}
    def order = new Order();
    when:
    validator.validate(order )
    then:
    final CustomException exception = thrown()
}

そして、AnotherCustomExceptioがスローされるため、失敗します。しかし、try{}catchブロックこの例外をキャッチしてCustomExceptionをスローするので、私のメソッドはCustomExceptionではなくAnotherCustomExceptioをスローすると予想しました。どうすればテストできますか?

16

thenブロックを修正する必要があると思います。次の構文を試してください。

then:
thrown CustomException
19
Marcos Carceles

たとえば、スローされた例外のメッセージを評価する場合は、次のようにします。

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