Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式运行JUnit测试,加载不同的.class文件_Java_Reflection_Junit_Classloader_Dynamic Class Loaders - Fatal编程技术网

Java 以编程方式运行JUnit测试,加载不同的.class文件

Java 以编程方式运行JUnit测试,加载不同的.class文件,java,reflection,junit,classloader,dynamic-class-loaders,Java,Reflection,Junit,Classloader,Dynamic Class Loaders,我目前能够以编程方式运行JUnit测试,如下所示: JUnitCore junit=new JUnitCore(); 结果=新结果(); 文件根=新文件(“rootwheresommatretest.classIS”); URLClassLoader=URLClassLoader.newInstance(新URL[]{root.toURI().toURL()}); Class cls=classLoader.loadClass(“SOMMOTRETEST”); 结果=junit.run(cls)

我目前能够以编程方式运行JUnit测试,如下所示:

JUnitCore junit=new JUnitCore();
结果=新结果();
文件根=新文件(“rootwheresommatretest.classIS”);
URLClassLoader=URLClassLoader.newInstance(新URL[]{root.toURI().toURL()});
Class cls=classLoader.loadClass(“SOMMOTRETEST”);
结果=junit.run(cls);
返回结果;
我不喜欢这段代码,因为sommatreest.class必须与Sommatore.class位于同一目录中才能工作。因此,我想知道是否可以运行Junit测试,从同一个类加载器中的不同目录分别加载.class文件,从而使SommatoreTest能够“查看”Sommatore


提前感谢您的回答!继续努力

您只需确保提供给
URLClassLoader
URL
与测试类的根文件夹或包含测试类的jar文件相匹配


在您的示例中,您似乎使用了一个目录,因此假设类的FQN是
my.package.MyTest
,并且文件
MyTest.class
位于
/my/class/dir/my/package
目录中,然后,您需要确保
URL
与测试类的根文件夹相匹配,在本例中,
/my/class/dir/

谢谢您的帮助@Nicolas Filotto,但是我想知道我是否可以使用my.class(非TestClass)中的方法运行
MyTest.class
,该方法位于目录
/my/class/dir/my/package
,例如位于
my/other/dir/my/package
中。基本上,我想知道
My.class
MyTest.class
是否需要在同一个目录中,或者可能有一个解决方法来做到这一点?不,这不是必需的,但它是按照惯例/实践的方式来实现的,以便能够访问包私有/受保护的方法/字段/构造函数。您认为我应该使用什么反思以实现我的目标?我相信你误解了某些东西,你的类及其相关的单元测试必须在同一个包中,这并不意味着必须在同一个目录中。您可以将您的资源放在/foo/src中,将您的测试类放在/foo/test中,这样您的类将在/foo/src/my/package中,而您的测试类将在/foo/test/my/package中。你应该考虑使用Maven将SRC和测试分开,再次感谢尼古拉斯,正如我从你的评论中看到的那样,我需要父目录无论如何都是相同的(Foo/)。所以,没有办法让MyClass.class(在包MyPackage中)在一台机器上,让MyClassTest.class(包MyPackage)在另一台机器上,让事情正常运行?我能闻到I/O的味道,只是想知道:你到底为什么要这样做?以如此复杂的方式加载JUnit测试有什么意义呢?我必须制作一个应用程序,其中我在远程机器上加载了一个TestClass,我的所有学生都必须编写一些代码,他们可以运行JUnit测试,同时向远程机器发送请求。(抱歉英语不好)如果不清楚,请告诉我。谢谢你的回答