用有限的属性断言java中的两个实例
我正在开发一个验证系统来比较同一类的两个实例 我使用反射断言来比较实例的属性。但有时我们不能期望某些属性的精确值,如系统生成时间、随机数等用有限的属性断言java中的两个实例,java,junit,verification,assertions,Java,Junit,Verification,Assertions,我正在开发一个验证系统来比较同一类的两个实例 我使用反射断言来比较实例的属性。但有时我们不能期望某些属性的精确值,如系统生成时间、随机数等 示例:考虑一个具有如下属性的类: Class=>TransactionDetails 属性=>1:transactionID 2:交易状态 3:交易时间 TransactionDetails的实际实例 TransactionDetails的预期实例 由于时间上的差异,断言的结果是=>false 所以,如果我给出我预期的例子,如下所示 具有有限(必需)值的Tr
示例:考虑一个具有如下属性的类:
Class=>TransactionDetails 属性=>1:transactionID 2:交易状态 3:交易时间 TransactionDetails的实际实例 TransactionDetails的预期实例 由于时间上的差异,断言的结果是=>false 所以,如果我给出我预期的例子,如下所示 具有有限(必需)值的TransactionDetails的预期实例 断言的结果是=>false,因为时间差(null&2015-10-15T15:46:53.378+05:30) 因此,在我的例子中,我只需要将强化2值与实际实例进行比较,需要跳过属性 用户不希望断言这些值 为了实现这一点,我正在进行反射以获取所有属性,并用实际实例检查预期实例中的丰富属性 但这将导致大型实例的性能问题。有什么简单的吗 这个需求的解决方案请分享您的想法以解决此问题,提前感谢。您可以标记要与自定义注释进行比较的字段。然后,您可以得到是否还应通过反射比较字段:
@CheckAnnotation
String tocompare = "SomeTimeDataString";
...
Annotation[] annotations = field.getDeclaredAnnotations();
for(Annotation annotation : annotations){
if(annotation instanceof CheckAnnotation){
//Compare the field
}
}
是否有具体的反思需要?您只需在有限的字段子集上生成一个
equals
和hashcode
方法检查
在eclipse中:菜单源>生成hashcode()和equals()。。。然后检查要比较的字段
这样可以避免由于反射而导致的性能问题…谢谢Friwi,但是验证器没有特权增强用户类中字段的字符,我的功能的输入只有两件事,1:完全丰富的实际值,2:有限的丰富的预期值。我只需要将预期实例中的有限值与实际实例进行比较。
1: transactionID : 987DFGAS876
2: transactionStatus : SUCCESS
3: transactionTime : 2015-10-15T15:39:29.127+05:30
1: transactionID : 987DFGAS876
2: transactionStatus : SUCCESS
@CheckAnnotation
String tocompare = "SomeTimeDataString";
...
Annotation[] annotations = field.getDeclaredAnnotations();
for(Annotation annotation : annotations){
if(annotation instanceof CheckAnnotation){
//Compare the field
}
}