这是我第一次编写 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/