NullPointerException в WorkbenchPage.busyShowView

У меня есть простое представление, обычно зарегистрированное в моем подключаемом модуле Eclipse (4.5.2), и оно работает, когда я запускаю экземпляр Eclipse с подключаемым модулем. Он все еще работает в соответствующем тестовом примере, который имеет следующий метод:

@Before
public void setUp() throws Exception {
    IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
    for (IViewReference viewReference : activePage.getViewReferences()) {
        activePage.hideView(viewReference);
    }
    activePage.showView("org.acme.MyView");
}

Тем не менее, когда я запускаю тот же тест с Tycho (0,22, 0,24 или 0,25), я получаю следующее исключение:

java.lang.NullPointerException: null
    at org.eclipse.ui.internal.WorkbenchPage.busyShowView(WorkbenchPage.java:1271)
    at org.eclipse.ui.internal.WorkbenchPage$12.run(WorkbenchPage.java:4238)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
    at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:4234)
    at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:4214)
    at org.acme.MyViewTest.setUp(MyViewTest.java:39)

Код Tycho прост:

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>tycho-surefire-plugin</artifactId>
    <configuration>
        <providerHint>junit4</providerHint>
        <useUIHarness>true</useUIHarness>
    </configuration>
</plugin>

Я нашел эту ошибку и еще парочку, но не нашел ничего, объясняющего, почему она не работает только в Тихо. И я не мог найти ничего о том, как это исправить.

Так что же я сделал не так? Как это исправить?


person Steffi S.    schedule 12.07.2016    source источник


Ответы (1)


Я предполагаю, что в вашей тестовой среде отсутствует что-то, что требуется для полноценной рабочей среды Eclipse и что добавляет PDE, но Tycho этого не делает. (По умолчанию Tycho добавляет только (переходные) зависимости вашего eclipse-test-plugin в среду выполнения теста.)

Попробуйте добавить следующее к вашему исполнению tycho-surefire-plugin:

<configuration>
  <!-- ... ->
  <dependencies>
    <dependency>
      <artifactId>org.eclipse.e4.rcp</artifactId>
      <type>eclipse-feature</type>
    </dependency>
  </dependencies>
</configuration>

Это должно привлечь в вашу тестовую среду множество плагинов, которые в противном случае могут отсутствовать (например, org.eclipse.e4.core.di, от которых тесты обычно прямо или косвенно не зависят).

Конечно, вышеизложенное работает только в том случае, если функция org.eclipse.e4.rcp является частью вашей целевой платформы.

person Andreas Sewe    schedule 16.08.2016
comment
Была такая же проблема, решение сработало с первого раза. Большое спасибо! - person Víctor; 15.02.2017