Testng 测试多个约束冲突返回消息

Testng 测试多个约束冲突返回消息,testng,hibernate-validator,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; 在我的测试课上,我目前正在这样测试它们

我正在测试特定字符串的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());
}
不会以任何特定顺序获取错误返回消息。
是否有一种方法可以避免此问题并使用一种方法来测试错误代码,或者我必须将每个案例分解为一个单独的方法?

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

您可能想看看我们的测试UTIL(它们使用assertj,但您可以不使用它):

我想也许有办法将消息存储在地图中,然后访问它们的断言,也可以考虑直接使用AdjtJ:<代码>断言(约束违规)。提取(“消息”)。只包含(“消息1”,“消息2”);
containsOnly()
接受给定元素的任何顺序。
constraintViolations.iterator().next().getMessage()