2017-02-08 91 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()}); 

我無法解釋爲什麼這工作雖然。如果有人有答案,我很樂意知道。