有一些问题,例如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...
}
}