У меня довольно большое количество классов, которые являются Serializable
/Externalizable
и, к сожалению, часто случается так, что я забываю serailize/desirialize новое поле при добавлении его к классу или неправильному использованию readObject
вместо readDouble
. Поэтому я решил написать какой-то единичный тест, который игнорируется и не будет работать maven-surefire-plugin
. Это только для моих собственных нужд. Это выглядит следующим образом:Как сравнить два объекта по их полям?
@Test(enabled = false)
public void testEquality(Object o){
String oPart = o.toString();
try (FileOutputStream fos = new FileOutputStream("/home/myusr/testser/" + oPart);
ObjectOutputStream ous = new ObjectOutputStream(fos)) {
ous.writeObject(o);
} catch (FileNotFoundException | IOException e) {
e.printStackTrace();
}
Object oo = null;
try (FileInputStream fis = new FileInputStream("/home/myusr/testser/" + oPart);
ObjectInputStream ois = new ObjectInputStream(fis)) {
Object oo = ois.readObject();
} catch (FileNotFoundException | IOException | ClassNotFoundException e) {
e.printStackTrace();
}
// Need to compare all non-transient fields of o and oo
}
Но вопрос заключается в том, чтобы сравнить все поля, которые не являются transient
с тем же именем. Я бы не хотел переопределять метод equals
только для целей тестирования.
Есть ли способ справиться с этим? Возможно, есть библиотеки commons
/guava
, которые могут справиться с этим.
Вы видели [shazamcrest] (https://github.com/shazam/shazamcrest)? –