使用Spring Boot Starter Test

时间:2018-04-20 07:25:22

标签: java unit-testing junit4 spring-boot-test assertj

在我的程序中,我抛出了一个自定义的异常对象MyCustomException,如下所示:

public class MyCustomException
{
    private MyCustomExceptionObject myCustomExceptionObject;
    // Getters, Setters, Constructors...
}

public class MyCustomExceptionObject
{
    int code;
    // Getters, Setters, Constructors...
}

使用Spring Boot Starter Test我可以使用许多测试库。

  • AssertJ
  • JUnit4
  • 的Mockito
  • Hamcrest

目前我主要使用AssertJ。我的一个测试为方法提供了无效参数,并期望出现异常。

@Test
public void test()
{
    org.assertj.core.api.Assertions.assertThatThrownBy(() -> someMethod(-1)).isExactlyInstanceOf(MyCustomException.class);
}

public void someMethod(int number)
{
    if (number < 0)
    {
        throw new MyCustomException(new MyCustomExceptionObject(12345));
    }
    //else do something useful
}

这很好用,但我想更具体地测试异常,测试code是否符合预期。像这样的东西会起作用:

try
{
    someMethod(-1);
}
catch (MyCustomException e)
{
    if (e.getCode() == 12345)
    {
        return;
    }
}

org.assertj.core.api.Assertions.fail("Exception not thrown");

但我宁愿寻找像单行一样的单线:

org.assertj.core.api.Assertions.assertThatThrownBy(() -> someMethod(-1)).isExactlyInstanceOf(MyCustomException.class).exceptionIs((e) -> e.getCode() == 12345);

在上面列出的任何测试库中是否存在类似的内容(AssertJ首选)?

1 个答案:

答案 0 :(得分:1)

我会尝试catchThrowableOfType,它允许你断言自定义异常数据,例如:

 set hive.support.concurrency=true;