我正在测试我对特定字符串的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()
不会以任何特定顺序获取错误返回消息。 有没有办法可以避免这个问题并有一种方法来测试错误代码,或者我必须将每个案例拆分成一个单独的方法吗?
答案 0 :(得分:2)
返回的约束违规的顺序未定义。所以你不能依赖它。
你可能想看看我们的测试工具(他们使用assertj,但你可以不用它): https://github.com/hibernate/hibernate-validator/blob/master/test-utils/src/main/java/org/hibernate/validator/testutil/ConstraintViolationAssert.java