syf*_*tid 6 java junit exception
这是我第一次编写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)
Run Code Online (Sandbox Code Playgroud)
这是我正在运行的测试:
/**
* 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);
}
Run Code Online (Sandbox Code Playgroud)
请注意,Base Sudoku是一个抽象类,而HyperSudoku是一个子类.
我在BaseSudokuTest中实现了以下抽象方法:
protected abstract BaseSudoku getObject(int size);
Run Code Online (Sandbox Code Playgroud)
这里的实现HyperSudokuTest扩展了BaseSudokuTest:
@Override
protected BaseSudoku getObject(int size) { //I need size for other implementations
return new HyperSudoku();
}
Run Code Online (Sandbox Code Playgroud)
你已经声明BaseSudokuTest有一种abstract方法,因此abstract本身.
假设您正在运行测试BaseSudokuTest,Junit使用反射来创建测试类的实例.无论是直接还是通过反射,都无法实例化抽象类.
将您的抽象方法移动到其他类.你的JUnit测试类不可能abstract.
或者说运行你的HyperSudokuTest课程.它将继承自的@Test方法BaseSudokuTest.