有一些问题,例如this one,涉及运行Eclipse JUnit插件测试的主题,但是我还没有找到如何触发我正在测试的插件的某些方面的示例。

我遵循了this documentation,其中提到了测试工具,但是我没有找到关于工具的更多文档。我可以将JUnit测试作为Eclipse插件测试来运行,但是我不确定如何使它们做有用的事情。

在这种情况下,这是我的具体问题:


如何设置调用被测插件的上下文(例如,“已选择IResource xyz”)?
我如何获得被测插件的句柄以调用它?我假设有一种方法可以调用其扩展之一?
我可以通过编程方式将资源注入Eclipse JUnit Test工作空间吗?

最佳答案

我已经成功地完成了大部分工作,这是我的步骤以及一些有兴趣的人的示例代码:


需要在Eclipse Plugin项目中定义插件测试。我更喜欢在与我正在测试的插件不同的项目中执行此操作。如果您采用这种方法,则需要将要测试的插件添加为依赖项。
您可以像常规的JUnit测试类一样创建测试类。
您可以使用“以JUnit插件测试方式运行”运行配置来运行测试类。 (右键单击->运行方式-> JUnit插件测试)。这将创建一个新的Eclipse实例并在其中运行测试。


以下是测试的一些示例代码,该测试使用测试插件的src目录中的内容在junit工作区中创建一些资源,然后进行一些声明。

设置资源:

package org.sampletest;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.IJobChangeListener;
import org.eclipse.core.runtime.jobs.IJobManager;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IWorkbench;
import org.junit.Test;

import com.example.myplugin.MyPlugin

public class MyPluginTest{

    @Test
    public void testMyPlugin() throws Exception{
         // assume an empty workspace - "Run as JUnit Plugin Test can be configured to clear the workspace before each run.
         String name = "myPluginTestProject";
         IProjectDescription = ResourcesPlugin.getWorkspace().newProjectDescription(name);
         IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
         project.create(desc, new NullProgressMonitor());
         project.open(new NullProgressMonitor());
         IFile file = project.getFile("myPluginTestFile");
         InputStream source = getClass().getClassLoader().getResourceAsStream("sampleFile");
         file.create(source, IFile.FORCE, null);

         // Assuming MyPlugin has some operation on an IStructuredSelection
         MyPlugin plugin = new MyPlugin();
         IStructuredSelection selection = new StructuredSelection(file);
         plugin.invoke(selection);

         // Make some assertions...
    }
}

09-10 09:34
查看更多