我有一个名为ReconciliationResult 的对象
public class ReconciliationResult {
Map<String, Object> recordValue;
List<Object> keyValues;
Origin origin;
ReconciliationResultStatus status;
public enum ReconciliationResultStatus {
INVALID_KEY,
DUPLICATE_KEY,
MATCHING,
NON_MATCHING;
}
public enum Origin {
LEFT_SIDE,
RIGHT_SIDE;
}
}
我正在将这个对象的一个实例与我的类的结果进行比较。正在测试
编辑:
List<ReconciliationResult> results =
reconciliationRegistry.getRecon("BPSVsGPM_TradeDated").reconcile(TESTDATE);
assertThat(results).usingRecursiveComparison().ignoringFields("id").isEqualTo(expectedMatch);
但是,我不想测试ReconciliationResult对象内recordValue字段中的ID字段。我不想测试它,因为我在这个类中有多个测试,每次我向嵌入的PG数据库插入一些东西时,ID都会增加,所以断言的ID永远不会相同。
我尝试在每次运行后使用JdbcTemplate
清除数据库,但没有成功。我还添加了@DirtiesContext
注释,因为测试是事务性的。遗憾的是,这些方法并不奏效。
如能对此事作出任何澄清,我们将不胜感激。如果你需要我提供更多信息,请告诉我。
您在这里调用方法的顺序不正确吗?assertThat(results).isEqualTo(expectedMatch).usingRecursiveComparison().ignoringFields("id");
您可能需要调用比较并忽略等于之前的字段。
assertThat(results).usingRecursiveComparison().ignoringFields("id").isEqualTo(expectedMatch);
我不得不单独对映射进行比较,因为ignoringFields是针对对象成员的,不能专门进入映射来忽略键。我创建了一个助手函数来过滤我的Map<字符串,对象>字段。
assertThat(results)
.usingRecursiveComparison()
.ignoringFields("recordValue", "keyValues")
.isEqualTo(expectedBreak);
assertThat(filterIgnoredKeys(results.get(0).getRecordValue()))
.usingRecursiveComparison()
.isEqualTo(filterIgnoredKeys(expectedBreak.get(0).getRecordValue()));
private static <V> Map<String, V> filterIgnoredKeys(Map<String, V> map) {
return Maps.filterKeys(map, key -> !IGNORED_FIELDS.contains(key));
}