【发布时间】:2021-11-16 15:40:28
【问题描述】:
我正在编写一些从 Java 8 转移过来的 Java 11 测试代码。代码如下所示:
HttpsURLConnection urlc = setupURLConnection(url);
boolean eqs = urlc.equals(urlc);
assertFalse("Unexpected equals returned", eqs);
查看 Java 11 文档,它提到当对自身调用 equals 时,任何非空引用对象都应该返回 true。但是,在 Java 8 中,上述测试通过了测试,即上述测试确定 urlc 在 Java 8 中不等于自身,而在 Java 11 中,测试确定 urlc 等于自身。我还可以确认 equals 方法没有被任何东西覆盖,它只是标准的 Object.equals 方法。
哪个版本的测试是正确的,哪个是不正确的?是否有可能测试代码实际上是正确的,并且 Java 11 代码存在一些问题导致测试失败?感谢您的帮助!
【问题讨论】:
-
那么
setupURLConnection()是做什么的?有人正在测试这样的东西这一事实意味着空气中有“创造力”,我并不是说好的方式。HttpsURLConnection是抽象的,如果你正在做一些非常奇怪的事情,你可以覆盖equals()来打破一般合同。