在我的单元测试中,我想访问一个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层次结构中?