Java 使用Class.forName(..).getInstance while new()时,Junit中的ClassNotFoundException可以正常工作

Java 使用Class.forName(..).getInstance while new()时,Junit中的ClassNotFoundException可以正常工作,java,unit-testing,ant,junit,classnotfoundexception,Java,Unit Testing,Ant,Junit,Classnotfoundexception,使用junit运行测试时,我得到ClassNotFoundException: 我有一堆测试类Main的测试用例。主类有一个方法,该方法接受表示数据类型的字符串,并使用class.forName(argument).newInstance()在内部构建该类型的实例。现在,当我手动测试时,这些方法本身运行良好。但是,在使用junit运行测试用例时,我得到传入数据类型的ClassNotFoundException(在方法中) 然后我在测试的方法中添加了一行:newmydatatype。奇怪的是,当我

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

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

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

Class Main{

public void someMethod( String dataType ){
new MyDataType();   // suceeds
Class.forName( dataType ).newInstance(); // got Exception when dataType = "MyDataType"
}
}
为什么会这样?当我在谷歌上搜索时,我发现许多答案表明
MyDataType.class
可能不在
classpath
中。我认为这里不是这样,因为new
MyDataType()
运行良好


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

请尝试提供完整的限定名,该名称是:


它也不起作用。出现异常,说找不到文件/目录这工作正常,很抱歉previus的评论,但为什么需要完整的类名而不仅仅是简单的类名。有没有办法用简单的名字动态加载一个类?没有看到你的代码有任何问题,不如清理你的项目,然后再次运行这个测试,有时我会遇到这种问题,并用这个来修复。已经尝试过了,没有用!!!虽然我认为原因是类.forName(),但原因是新的MyDataType()只创建了实例,而类.forName()必须保证该类已由jvm加载,否则它将得到异常:classNotFound。对不起,我不明白,如果jvm实例创建没有用new()加载该类也会导致异常,不是吗?请点击此链接:查找更多
Class.forName("com.package.where.class.exists.MyDataType").newInstance();