Создание IMarker в JUnit Test Fails - PullRequest
0 голосов
/ 28 мая 2019

Я создаю свой собственный IMarker в Eclipse. Конечно, я тестирую свой код, и именно здесь начинаются проблемы. Тесты выглядят примерно так:

public class MarkerTest {

    private IProject project;

    @Before
    public void setUp() throws Exception {
        final IProgressMonitor progressMonitor = new NullProgressMonitor();
        final IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
        this.project = root.getProject(UUID.randomUUID().toString());
        this.project.create(progressMonitor);
        this.project.open(progressMonitor);
    }

    @Test
    public void testMarkerCreation() throws Exception {
        final IMarker marker = this.project.createMarker("org.eclipse.core.resources.problemmarker");
        marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
        marker.setAttribute(IMarker.MESSAGE, "Hello World.");
        marker.setAttribute("attribute", "abc");
    }
}

Этот код работает для одного метода тестирования. Это часто работает для всего тестового класса. Но выполнение всех моих тестов за один раз приведет к провалу около 10%:

org.eclipse.core.internal.resources.ResourceException: Marker id X not found.
    at org.eclipse.core.internal.resources.Marker.checkInfo(Marker.java:57)
    at org.eclipse.core.internal.resources.Marker.setAttribute(Marker.java:254)
    at MarkerTest.testMarkerCreation(MarkerTest.java:50)
    ... 56 more

(Исключение указывает случайным образом либо на первое, либо на второе setAttribute.)

То же самое происходит, если я не запускаю тесты из Eclipse, но выполняю сборку Tycho. Какой тест проваливается, кажется случайным. Если перезапустить тесты, остальные 10% не пройдут.

Приложение Eclipse работает отлично, маркеры создаются просто отлично, я не видел исключений там (но, с другой стороны, вероятность того, что они появятся для каждого маркера, составляет всего 10%).

Я пытался смоделировать проблему с помощью одного теста с помощью цикла или параметризованных тестов или чего-то еще, но это не воспроизводилось.

Есть несколько ошибок с этим исключением, но они не имеют особого отношения к моей ситуации:

  • Ошибка 212341 - [Маркеры] «Идентификатор маркера 2 не найден» в журнале после «Выбрать все в редакторе Java с предупреждениями»
  • Ошибка 214223 - [Маркеры] 'Идентификатор маркера не найден' исключения из GroupMarkerField # compare (..) в журнале
  • Ошибка 500292 - "ResourceException: идентификатор маркера не найден", когда включены действия сохранения
  • ...

Я пытался скомпилировать Eclipse 4.5 и 4.10, но оба имеют одинаковые исключения.

Так в чем проблема? Как мне это исправить?

Обновление: После добавления

@After
public void tearDown() throws Exception {
        this.project.delete(true, new NullProgressMonitor());
}

Только 2% теста не пройдены. Это мне совсем не помогает.

...