2016-10-08 42 views
1

我目前能够运行JUnit测试程序做这样的事情:运行JUnit测试程序加载不同的.class文件

JUnitCore junit = new JUnitCore(); 
Result result = new Result(); 

File root = new File("rootWhereSommatoreTest.classIS"); 
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{root.toURI().toURL() }); 
Class<?> cls = classLoader.loadClass("SommatoreTest"); 
result = junit.run(cls); 
return result; 

什么,我不喜欢这个代码是SommatoreTest.class必须在与Sommatore.class相同的目录工作。所以我想知道是否可以运行Junit测试,在同一个ClassLoader中从不同目录中单独加载.class文件,使SommatoreTest能够“看到”Sommatore。

在此先感谢您的答案!保持良好的工作!

+0

只是想知道:你为什么要这样做?以如此复杂的方式加载JUnit测试有什么意义? – GhostCat

+0

我必须创建一个应用程序,其中我在远程计算机上加载了一个TestClass,并且我的所有学生都必须编写一些代码,并且他们可以运行junit测试并发地向此远程计算机发送请求。 (对不起英语不好)如果不清楚就告诉我。感谢您的回答 –

回答

0

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

你的情况,你似乎使用目录,所以假设你的类的FQN是my.package.MyTest和文件MyTest.class是在目录/my/class/dir/my/package,那么你需要确保该URL将匹配的根文件夹您的测试课程将在这种情况下为/my/class/dir/

+0

感谢您的帮助@Nicolas Filotto,但我想知道是否可以使用My.class中的方法来运行位于目录'/ my/class/dir/my/package'中的'MyTest.class'(所以非TestClass),例如位于'my/another/dir/my/package'中。基本上我想知道如果'My.class'和'MyTest.class'需要在同一个目录中,或者可能有一个解决方法来做到这一点? –

+0

不,这是没有必要的,但它是如何通过惯例/在实践中能够访问包私有/受保护的方法/字段/构造函数 –

+0

您认为我应该使用反射来实现我的目标吗? –

相关问题