Мой подход:
public void testRowsToBeRead(){
HashSet<SomeObject> expectedRows = new HasSet<SomeObject();
expectedRows.add(new SomeObject("abc"));
expectedRows.add(new SomeObject("def"));
HashSet<SomeObject> rows = new SomeObject().read();
// alternative 1
assertEquals(19, rows.size());
for(SomeObject r:rows){
if (!expectedRows.contains(r)) {
// test failed
}
}
// alternative 2
assertTrue(expectedRows.equals(rows));
}
Чтобы полагаться на этот тест, вам могут потребоваться другие модульные тесты, подтверждающие, что SomeObject
equals
и hashCode
методы работают так, как и должно быть ...
РЕДАКТИРОВАТЬ на основе одного из ваших комментариев
Если вы хотите проверить поля, не входящие в equals
контракт, вам нужно выполнить итерацию по набору:
public void testRowsToBeRead(){
HashSet<SomeObject> expectedRows = new HasSet<SomeObject();
expectedRows.add(new SomeObject("a", "a1"));
expectedRows.add(new SomeObject("b", "b1"));
HashSet<SomeObject> rows = new SomeObject().read();
for(SomeObject r : rows) {
SomeObject expected = expectedRows.get(r); // equals and hashCode must still match
if (expected == null) {
// failed
}
if (!expected.getField1().equals(r.getField1()) && !expected.getField2().equals(r.getField2())) {
// failed
}
}
}
В приведенном выше примере SomeObject
equals
может выглядеть следующим образом, он проверяет только на field1
:
@Override
public boolean equals(Object other) {
return this.getField1().equals( ((SomeObject) other).getField1() );
}
Без вопросов, в зависимости от конкретного варианта использованияэто может стать более сложным.Надеюсь, это поможет ...