【发布时间】:2024-04-14 07:20:01
【问题描述】:
在测试类中,我想提供我自己的 assertEquals 重载,并提供一些不依赖于 Object.equals 的特殊逻辑。不幸的是,这不起作用,因为一旦我在本地声明了我的 assertEquals 方法,Java 就再也找不到来自 org.junit.Assert.* 的静态导入了。
有没有办法解决这个问题? IE。有没有办法为静态导入的方法提供额外的重载? (相当明显的解决方案是为方法命名不同,但这种解决方案没有相同的审美吸引力。)
我的测试类文件如下所示:
package org.foo.bar;
import static org.junit.Assert.*;
import org.junit.Test;
public class BarTest {
private static void assertEquals(Bar expected, Bar other) {
// Some custom logic to test equality.
}
@Test
public void testGetFoo() throws Exception {
Bar a = new Bar();
assertEquals(42, a.getFoo()); // Error *
}
@Test
public void testCopyConstructor() throws Exception {
Bar a = new Bar();
// Fill a.
Bar b = new Bar(a);
assertEquals(a, b);
}
}
Error * 是“BarTest 类型中的方法assertEquals(Bar, Bar) 不适用于参数(int, int)。”
【问题讨论】:
-
Bar 类中 getFoo() 的返回类型是什么 - int 或其他?
-
没关系,通过错误消息发现它是 int。
-
这不是一个直接的答案,但我真的会质疑您这样做的动机,即您所说的“审美吸引力”。如果我是一名阅读单元测试的开发人员,我希望 assertEquals 始终是 JUnit 的实现。在我看来,使用方法 assertBarEquals 更具交流性。这是一个有效的问题,我可以看到它在其他情况下如何有用,我只是不相信任何其他方式能胜过 assertBarEquals()。
-
P.S.问题标题中有一个错字我没有代表来修复,“overloding”->“overloading”。 :)
标签: java static-import