Мне нужно утверждать два сложных объекта, которые могут содержать как примитивные, так и n уровни объектов внутри. поэтому я googled и выбрал библиотеку unitils
. Но у меня есть условие, что мне нужно рассматривать как пустую, так и пустую строку как равные. Но здесь он поддерживает только ReflectionComparatorMode.IGNORE_DEFAULTS
. Сценарий:Как сравнить два сложных объекта и игнорировать как пустую, так и пустую строку?
public class AssertVerify {
public static void main(String args[]){
CustomerPojo cuPojo1=new CustomerPojo();
CustomerPojo cuPojo2=new CustomerPojo();
cuPojo1.setCustomerName("obuli");
cuPojo1.setCustomerAge("20");
cuPojo1.setAddress("");
cuPojo2.setCustomerName("obuli");
cuPojo2.setCustomerAge("20");
/**
* Asserting two pojos
*/
ReflectionAssert.assertReflectionEquals(cuPojo1, cuPojo2,
ReflectionComparatorMode.LENIENT_DATES ,ReflectionComparatorMode.IGNORE_DEFAULTS);
}
Ошибка:
junit.framework.AssertionFailedError:
Expected: CustomerPojo<customerName="obuli", customerAge="20", Address="">
Actual: CustomerPojo<customerName="obuli", customerAge="20", Address=null>
--- Found following differences ---
Address: expected: "", actual: null
--- Difference detail tree ---
expected: CustomerPojo<customerName="obuli", customerAge="20", Address="">
actual: CustomerPojo<customerName="obuli", customerAge="20", Address=null>
Address expected: ""
Address actual: null
at junit.framework.Assert.fail(Assert.java:47)
at org.unitils.reflectionassert.ReflectionAssert.assertReflectionEquals(ReflectionA ssert.java:136)at org.unitils.reflectionassert.ReflectionAssert.assertReflectionEquals(ReflectionA ssert.java:99)
atcom.assertion.verify.AssertVerify.main(AssertVerify.java:52)
picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
Мне нужно добавить правило, рассматривать как нуль и пустая строка, как равные.
Есть ли какие-либо возможные решения для моей ситуации.
Почему бы просто не реализовать сопоставимый интерфейс и написать собственный метод equals? – Gremash