java - 测试抽象类抛出 InstantiationException

标签 java exception junit

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

相关文章:

exception - SonataUserBundle FOSUserBundle UniqueEntity 电子邮件和用户名

java - 简单的 Spring EL 表达式不起作用;出现错误 TypeMismatchException

java - 带有前后(。*)慢的Java正则表达式

java - 确保关闭方法调用内打开的流的最佳方法

java - 如何在java中制作一个没有任何for循环的字符串替换程序?

java - Mockito ArgumentCaptor 未捕获 catch block 中的参数

java - 在ant中使用junit

java - 使用 apache tika Parser 对象解析 .doc 和 .docx 文件格式的问题

java - 调用 Url.OpenStream 时出现 Android NetworkOnMainThreadException

java - 将 JUnitCore ( JUnit ) 更改为 TestNG