测试多个约束违规返回消息

时间:2017-01-30 17:01:20

标签: testng hibernate-validator

我正在测试我对特定字符串的hibernate大小限制,并且我想检查一个单元测试方法中的所有返回代码,而不是必须创建一个单独的函数来测试每个大小约束错误返回。 所以我的java类中有一些字符串看起来像:

@Size(max = 10, message = "String a is too big")
private String a;

@Size(max = 20, message = "String b is too big")
private String b;

在我的测试课程中,我目前正在测试它们:

@Test
public void aIsTooLongTest(){
    ...code to set length of a as a string > 10 and b < 20
    Set<ConstraintViolation<SomeObj>> constraintViolations = validator.validate(instanceOfSomeObj);
    assertEquals(2, constraintViolations.size());
    assertEquals("String a is too big", constraintViolations.iterator().next().getMessage());
}

这样可以正常工作,但是当我进行这样的测试时,我必须编写两个单独的方法(一个用于a太大而一个用于b太大的情况)。我想将此结合到一个方法,其中a和b太大,我想检查两者都返回了正确的错误消息。问题是,我似乎无法找到访问特定错误返回消息的方法。例如,代码

constraintViolations.iterator().next().getMessage()

不会以任何特定顺序获取错误返回消息。 有没有办法可以避免这个问题并有一种方法来测试错误代码,或者我必须将每个案例拆分成一个单独的方法吗?

1 个答案:

答案 0 :(得分:2)

返回的约束违规的顺序未定义。所以你不能依赖它。

你可能想看看我们的测试工具(他们使用assertj,但你可以不用它): https://github.com/hibernate/hibernate-validator/blob/master/test-utils/src/main/java/org/hibernate/validator/testutil/ConstraintViolationAssert.java