【发布时间】:2021-11-26 07:02:28
【问题描述】:
我正在使用 JUnit 5,并从“软件测试”一书中复制了代码,以便创建一个用于测试的模拟对象。部分测试代码是:
@Test
public void rangesOKTestWithoutDependency() {
// This is an anonymous class
SimpleDate simpleDate = new SimpleDate(1, 1, 2000) {
@Override
public boolean isLeap(int year) {
if(2000 == year) return true;
else if(2001 == year) return false;
else throw new IllegalArgumentException("No Mock for year " + year);
}
};
assertTrue(simpleDate.rangesOK(2, 29, 2000)); // Valid due to leap year
assertFalse(simpleDate.rangesOK(2, 29, 2001)); // Valid due to leap year
}
我有一个编译器错误,上面写着“方法 isLeap(int) 必须覆盖或实现超类型方法”。在我覆盖 isLeap() 方法的那一行报告了这个错误。 (@override 下面的行)
嗯,令人惊讶的是,这就是我所做的。所以我不知道这是在抱怨什么。 这是 simpleDate 类中的 isLeap() 方法:
private boolean isLeap(int year) {
boolean isLeapYear = true;
if(year % 4 != 0)
isLeapYear = false;
else if(year % 100 != 0)
isLeapYear = true;
else if(year % 400 != 0)
isLeapYear = false;
return isLeapYear;
}
正如您所见,测试器中的方法是原始方法的重写版本,但我仍然收到错误消息。有什么想法吗?
ps:我正在使用eclipse。
【问题讨论】:
-
public boolean isLeapvsprivate boolean isLeap -
您不能覆盖
private方法,它必须是protected或public
标签: java eclipse junit5 anonymous-class