Я создаю свой собственный 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% теста не пройдены. Это мне совсем не помогает.