这是我第一次编写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);
}注意,HyperSudoku是一个抽象类,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();
}发布于 2014-01-17 15:57:00
您已经指出,BaseSudokuTest有一个abstract方法,因此是abstract本身。
假设您通过BaseSudokuTest运行测试,Junit将使用反射来创建测试类的实例。不能直接或通过反射实例化抽象类。
将抽象方法移动到其他类。您的JUnit测试类不能是abstract。
或者更确切地说,运行HyperSudokuTest类。它将从@Test继承BaseSudokuTest方法。
发布于 2020-01-04 10:56:32
我遇到了一个类似的问题,这是由于将抽象测试类添加到TestSuite中引起的:
import junit.framework.TestSuite;
public class AllTests {
public static TestSuite suite(){
TestSuite suite = new TestSuite();
suite.addTestSuite(SessionTest.class); // Abstract class
suite.addTestSuite(CourseSessionTest.class); // Extends SessionTest
return suite;
}
}将SessionTest.class从TestSuite中删除,修复了我的问题,因为我试图通过将抽象类添加到套件(这是错误的来源)中实例化它,而CourseSessionTest无论如何都在调用它中的所有方法。
https://stackoverflow.com/questions/21190019
复制相似问题