使用Class.forName(..)时的Junit的ClassNotFoundException。getInstance而new()工作正常

时间:2013-03-11 05:01:18

标签: java unit-testing ant junit classnotfoundexception

使用junit运行测试时,我得到ClassNotFoundException

我有一堆测试Class Main的测试用例。 Main类有一个方法,它接受表示数据类型的字符串,并使用Class.forName( argument ).newInstance()在内部构建该类型的实例。现在,当我手动测试时,方法本身工作正常。但是在使用junit运行测试用例时,我获得传入的数据类型的ClassNotFoundException(在方法中)。

然后我添加了一行:新的MyDataType到正在测试的方法。奇怪的是,当我通过Class.forName( MyDataType ).newInstance()创建实例的成功行失败时,操作会成功。

Class Main{

public void someMethod( String dataType ){
new MyDataType();   // suceeds
Class.forName( dataType ).newInstance(); // got Exception when dataType = "MyDataType"
}
}

这是为什么?当我用Google搜索时,我发现了一些答案,表明MyDataType.class可能不在classpath。我不认为这是因为新的MyDataType()运行正常。

我的运行时和构建时类路径包含包含所需类的jar。

1 个答案:

答案 0 :(得分:4)

尝试提供method所需的完整限定名称:

Class.forName("com.package.where.class.exists.MyDataType").newInstance();