2016-06-03 3 views
0

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

установки

Тест выглядит следующим образом:

ADao aDao = EasyMock.createNiceMock(ADao.class); 
aDao.aCall(EasyMock.eq(anObject), EasyMock.eq(true)); 
EasyMock.expectLastCall().andReturn(TestHelper.getAList(anObject)); 

Затем aDao передается в контроллер для некоторых рабочих потоков, контроллер начинает N потоков и тест взаимодействует с одним из потоков с использованием очередей событий.

Проблема, с которой я сталкиваюсь, заключается в том, что когда рабочие потоки пытаются использовать насмешливый Дао, они не возвращают список, переданный andReturn, но его копия, и копия иногда является неполной. TestHelper.getAList возвращает ArrayList из 139 предметов, но иногда изредка возвращает идеальную копию, иногда копию с 14 или 16 элементами. Я считаю, что копирование все еще выполняется в другом потоке, потому что итерация по возвращенному списку вызывает ConcurrentModificationException.

Есть ли способ сделать EasyMock или использовать объект, который был настроен вместо копирования или b/закончить копирование, прежде чем объект будет передан вызывающему абоненту?

(маркировка EasyMock с makeThreadSafe(..., false) не решает проблему.)

ответ

0

ОК, я решил проблему с

EasyMock.expectLastCall().andAnswer(new IAnswer<List>() { ... }); 
Смежные вопросы