私は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
をスローすると予想しました。どうすればテストできますか?
then
ブロックを修正する必要があると思います。次の構文を試してください。
then:
thrown CustomException
たとえば、スローされた例外のメッセージを評価する場合は、次のようにします。
then:
def e = thrown(CustomException)
e.message == "Some Message"
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
}