测试抽象类会抛出InstantiationException

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)

Sot*_*lis 6

你已经声明BaseSudokuTest有一种abstract方法,因此abstract本身.

假设您正在运行测试BaseSudokuTest,Junit使用反射来创建测试类的实例.无论是直接还是通过反射,都无法实例化抽象类.

将您的抽象方法移动到其他类.你的JUnit测试类不可能abstract.

或者说运行你的HyperSudokuTest课程.它将继承自的@Test方法BaseSudokuTest.