gpt4 book ai didi

java - 测试抽象类抛出 InstantiationException

转载 作者:行者123 更新时间:2023-12-04 10:50:04 26 4
gpt4 key购买 nike

这是我第一次编写 JUnit 测试,遇到了以下问题。我必须为抽象类编写测试,有人告诉我这样做:
http://marcovaltas.com/2011/09/23/abstract-class-testing-using-junit.html

但是,当我尝试运行第一个测试时,我得到了 InstantiationException像这样:

java.lang.InstantiationException
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)

这是我正在运行的测试:
/**
* Test of setNumber method, of class BaseSudoku.
*/
@Test
public void testSetNumber_3args() {
System.out.println("setNumber");

BaseSudoku b = getObject(9);
boolean expResult = false;
boolean result = b.setNumber(0, -7, 7);
assertEquals(expResult, result);
}

请注意,Base Sudoku 是一个抽象类,而 HyperSudoku 是一个子类。

我在 BaseSudokuTest 中实现了以下抽象方法:
protected abstract BaseSudoku getObject(int size); 

这是 HyperSudokuTest 中的实现扩展 BaseSudokuTest :
@Override
protected BaseSudoku getObject(int size) { //I need size for other implementations
return new HyperSudoku();
}

最佳答案

您已经声明 BaseSudokuTest有一个 abstract方法,因此是 abstract本身。

假设您正在通过 BaseSudokuTest 运行您的测试, Junit 使用反射来创建测试类的实例。您不能直接或通过反射实例化抽象类。

将您的抽象方法移至其他类。您的 JUnit 测试类不能是 abstract .

或者运行您的 HyperSudokuTest类(class)。它将继承 @Test来自 BaseSudokuTest 的方法.

关于java - 测试抽象类抛出 InstantiationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21190019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com