AssertJ错误报告由于与toString()的循环引用而失败。
创始人
2024-09-20 16:00:24
0

在Java中,如果在对象的toString()方法中也包含对其他对象的引用,就可能会导致循环引用的问题,而这会使AssertJ错误报告失败。下面是一个例子:

public class Person { private String name; private Person friend;

// constructors, getters and setters

@Override
public String toString() {
    return "Person{" +
            "name='" + name + '\'' +
            ", friend=" + friend +
            '}';
}

}

在上面的代码中,Person对象引用了另一个Person对象作为朋友,而在toString()方法中又引用了朋友对象,这就导致了循环引用的问题。

为了解决这个问题,我们可以使用AssertJ的自定义错误描述符(error descriptor)来改变错误报告中对象的默认格式。我们可以创建一个自定义的错误描述符,并在其中重写失败的断言的toString()方法,例如:

public class CustomErrorDescriptor extends StandardRepresentation {

@Override
public String toStringOf(Object o) {
    if (o instanceof Person) {
        Person person = (Person) o;
        return "Person{name='" + person.getName() + "'}";
    }
    // default behavior for other objects
    return super.toStringOf(o);
}

}

然后,我们可以在测试类中使用这个自定义错误描述符来进行断言:

@Test public void testCircularReference() { Person a = new Person("Alice"); Person b = new Person("Bob");

a.setFriend(b);
b.setFriend(a);

assertThat(a).usingComparator(new CustomErrorDescriptor())
        .isEqualTo(b);

}

在这个示例中,CustomErrorDescriptor类重写了toStringOf()方法,将Person对象表示为“Person{name=‘某个人的名字’}”,而其他对象则使用默认的表示方式。在测试方法中,我们使用assertThat()方法来进行断言,并使用withFailMessage()方法来添加自定义的错误描述符。此时,如果测试失败,我们将看到一个更

相关内容

热门资讯

黑科技科技(wepoke智能a... 黑科技科技(wepoke智能ai)wepower使用说明书(wepOkE)素来是真的有挂(确实有挂)...
黑科技模拟器(wepoke智能... WePoker透视辅助工具核心要点解析‌,黑科技模拟器(wepoke智能ai)wepoke是机器发牌...
黑科技脚本(wepokeai代... 您好,这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这款游戏中打牌都...
黑科技辅助挂(wepoke真的... 黑科技辅助挂(wepoke真的有挂)wepoke 软件(wEPOKE)固有真的有挂(有挂猫腻)-哔哩...
黑科技辅助挂(wepoke黑科... 黑科技辅助挂(wepoke黑科技)wepoke软件透明挂演示(wEpOke)一直真的有挂(真的有挂)...
黑科技app(wepoke真的... 此外,数据分析德州()辅助神器app还具备辅助透视行为开挂功能,通过对客户透明挂的深入研究,你可以了...
黑科技智能ai(wepoke辅... 黑科技智能ai(wepoke辅助插件)wepoke软件透明(WEPOke)先前是有挂(果真有挂)-哔...
黑科技模拟器(wepoke透明... 黑科技模拟器(wepoke透明黑科技)wepoke德州扑克用ai代打(WEPOKE)最初存在有挂(有...
黑科技插件(wepoke辅助插... 黑科技插件(wepoke辅助插件)wepoke软件透明(WEPOke)从来是真的有挂(有挂解惑)-哔...
黑科技美元局(wepoke智能... 黑科技美元局(wepoke智能ai)wepoke辅助真的假的(wepoKE)原先真的有挂(竟然有挂)...