2017-02-08 59 views
1

我试图运行一些JUnit的从一个Eclipse插件4次测试运行JUnit测试,但我只得到以下故障:无法从Eclipse插件

initializationError(testpkg.TestClass):没有可运行方法

测试类是非常简单的:

package testpkg; 
(...) 
public class TestClass { 
    @Test 
    public void test() { 
     System.out.println("Test run"); 
     Assert.assertTrue(true); 
    } 
} 

当我在一个简单的Java项目编程方式运行它,它的工作原理,但不是在一个Eclipse插件:

public class DiscoverHandler extends AbstractHandler { 
     @Override 
     public Object execute(ExecutionEvent event) throws ExecutionException { 
      (...) 
      File file = new File("C:(...)\\target\\test-classes"); //The .class file 
      URLClassLoader classLoader = new URLClassLoader(new URL[] file.toURI().toURL()}); 
      JUnitCore.runClasses(classLoader.loadClass("testpkg.TestClass")).getFailures().forEach(c -> System.out.println(c.toString())); 
     } 
    } 

简单Java项目中的相同代码实际上将打印“测试运行”字符串。

有谁知道这个错误可能来自哪里? 谢谢

+0

当你调试你的代码时:它是否作为插件找到类?有时候我在插件插件中遇到麻烦。 – IQV

+0

是的,使用File.exists()或甚至ClassLoader.loadClass(“testpkg.TestClass”)将返回正确的类对象及其test()方法。 另外我能够启动使用\t \t \t \t \t DebugPlugin.getDefault()。getLaunchManager()测试配置。getLaunchConfigurations()[1] .launch(org.eclipse.debug.core.ILaunchManager.RUN_MODE,空); 但这不是我想要的 –

回答

0

我终于成功地做到这一点,这样做:

URLClassLoader classLoader = new URLClassLoader(new URL[]{file.toURI().toURL()}, this.getClass().getClassLoader()); 

取而代之的是:

URLClassLoader classLoader = new URLClassLoader(new URL[] file.toURI().toURL()}); 

我无法解释为什么这工作虽然。如果有人有答案,我很乐意知道。