Eclipse 4 RCP应用程序的单元测试中的依赖注入

时间:2016-08-30 08:16:12

标签: java eclipse eclipse-rcp e4

在我的单元测试中,我想访问一个Part以检查是否存在某些UI组件。 Part的构造函数使用依赖注入,对于一些测试,partService应该是“真实的”而不是模拟的:

@Inject
public MyPart(EPartService partService) {
    ...
}  

在TestCase中,我想访问/创建Part。我尝试了几件事,并对如何做有一些疑问。我在TestCase中的第一个尝试看起来像这样:

@Test
public void testAGlobalVariableShouldBeAddableToTheUi() {
    /* First try
        IEclipseContext context = null;
        context = EclipseContextFactory.create();
        myPart = ContextInjectionFactory.make(MyPart.class,context);
    */

    //Second try (Discouraged Access)
    myPart= InjectorFactory.getDefault().make(MyPart.class,null);
}

当我尝试将其作为JUnit Test运行时,我得到ExceptionInInitializer异常。 当我尝试将其作为JUnit插件测试运行时,我得到一个“找不到令人满意的构造函数”异常。

我的问题是:
如何在JUnit TestCase中检索/创建零件?
如果我尝试将TestCases作为JUnitPlugin测试运行,我可以获得已创建的部件吗?

编辑: 我也试过

try {
    myPart = (MyPart)PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView("de.mypart");
    } catch (PartInitException e) {
        e.printStackTrace();
}

是什么给了我这个例外: org.eclipse.ui.PartInitException:无法创建视图:de.mypart

编辑: 我按照建议尝试模拟EPartService。然后我需要把它放在上下文中。 我是这样做的:

context.set(EPartService.class, partService); 
context.set(Composite.class, shell);

Eclipse说它找不到Composite。我猜这是需要的:

@PostConstruct 
public void postConstruct(Composite parent) 

我是否需要以不同的方式将Composite放在上下文中?如何将我的Context挂起到Context层次结构中?

0 个答案:

没有答案