忽略 Map<String, Object> 中的字段,该字段在测试时是类的成员



我有一个名为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));
}

最新更新