用有限的属性断言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
    }
}