通过使用JUnit,是否可以预料原因?

时间:2018-07-02 14:21:47

标签: java junit expected-exception

如果我因某种原因希望发生异常,可以使用以下方法进行检查:

exception.expectCause(IsInstanceOf.instanceOf(MyExceptionB.class));

如何检查有原因的异常? 即我有一个原因为MyExceptionA,原因为MyExceptionB的异常MyExceptionC。如何检查是否抛出了MyExceptionC

1 个答案:

答案 0 :(得分:2)

您可以创建hasCause匹配器并将其与ExpectedException一起使用

import org.hamcrest.Matcher;
import org.hamcrest.Matchers;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;

import static org.hamcrest.Matchers.*;
import static org.junit.rules.ExpectedException.none;

public class XTest {

    @Rule
    public final ExpectedException thrown = none();

    @Test
    public void any() {
        thrown.expect(
                hasCause(hasCause(instanceOf(RuntimeException.class))));
        throw new RuntimeException(
                new RuntimeException(
                        new RuntimeException("dummy message")
                )
        );
    }

    private Matcher hasCause(Matcher matcher) {
        return Matchers.hasProperty("cause", matcher);
    }
}