private void assertSameConcept(Concept expected, Concept actual, List<String> traversedUrns) { String errMsg = String.format("%1$s != %2$s", expected, actual); Assert.assertEquals(errMsg, expected, actual); Assert.assertEquals(errMsg, expected.getLabel(), actual.getLabel()); Assert.assertEquals(errMsg, expected.getPreferredLabel(), actual.getPreferredLabel()); Assert.assertEquals(errMsg, expected.isHref(), actual.isHref()); Assert.assertEquals(errMsg, expected.getDefinition(), actual.getDefinition()); // To deal with cycles in the hierarchy if (traversedUrns.contains(expected.getUrn())) { return; } else { traversedUrns.add(expected.getUrn()); } assertSameConcept(expected.getBroader(), actual.getBroader(), traversedUrns); assertSameConcept(expected.getNarrower(), actual.getNarrower(), traversedUrns); assertSameConcept(expected.getRelated(), actual.getRelated(), traversedUrns); }