有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

junit用有限的属性断言java中的两个实例

我正在开发一个验证系统来比较同一类的两个实例

我使用反射断言来比较实例的属性。但有时我们不能期望某些属性的精确值,如系统生成时间、随机数等

示例:考虑一个具有如下属性的类:

类别=>;交易详情

属性=>;1:transactionID 2:交易状态 3:交易时间

交易详情的实际实例

1: transactionID : 987DFGAS876
2: transactionStatus : SUCCESS
3: transactionTime : 2015-10-15T15:46:53.378+05:30

交易详情的预期实例

1: transactionID : 987DFGAS876
2: transactionStatus : SUCCESS
3: transactionTime : 2015-10-15T15:39:29.127+05:30

断言的结果为=>错误因为时间不同

所以,如果我给出我预期的例子,如下所示

具有有限(必需)值的TransactionDetails的预期实例

1: transactionID : 987DFGAS876
2: transactionStatus : SUCCESS

断言的结果为=>false因为时间差(null&;2015-10-15T15:46:53.378+05:30)

因此,在我的例子中,我只需要将强化2值与实际实例进行比较,需要跳过属性 用户不希望断言这些值

为了实现这一点,我正在进行反射以获取所有属性,并用实际实例检查预期实例中的丰富属性

但这将导致大型实例的性能问题。有什么简单的吗 这个需求的解决方案

请分享您的想法来解决这个问题,提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    可以标记要与自定义注释进行比较的字段。然后,您可以得到是否还应通过反射比较字段:

    @CheckAnnotation
    String tocompare = "SomeTimeDataString";
    ...
    Annotation[] annotations = field.getDeclaredAnnotations();
    
    for(Annotation annotation : annotations){
        if(annotation instanceof CheckAnnotation){
            //Compare the field
        }
    }
    
  2. # 2 楼答案

    是否有具体的反思需要?只需在有限的字段子集上生成equalshashcode方法检查即可

    在eclipse中:菜单源>;生成hashcode()和equals()。。。然后检查要比较的字段

    这样可以避免由于反射而导致的性能问题