使用模拟对象形成多个线程

时间:2016-06-03 08:53:45

标签: multithreading easymock

我继承了一段遗留代码,现在我正在努力进行有时失败的测试。

测试设置如下:

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

然后将aDao传递给某些工作线程的控制器,控制器启动N个线程,测试使用事件队列与其中一个线程进行通信。

我遇到的问题是,当工作线程尝试使用模拟的Dao时,他们不会返回传递给andReturn的列表但是它的副本,并且副本有时是不完整的。 TestHelper.getAList会返回139个项目的ArrayList,但模拟有时会返回完美副本,有时会返回14或16个项目的副本。我相信复制仍在另一个线程中执行,因为迭代返回的列表会抛出ConcurrentModificationException

在将对象传递给调用者之前,有没有办法让EasyMock使用/使用它设置的对象而不是复制或b /完成复制?

(用makeThreadSafe(..., false)标记EasyMock无法解决问题。)

1 个答案:

答案 0 :(得分:0)

好的,我用

解决了这个问题
EasyMock.expectLastCall().andAnswer(new IAnswer<List>() { ... });