java – EasyMock并修改了一个可变的方法参数

前端之家收集整理的这篇文章主要介绍了java – EasyMock并修改了一个可变的方法参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何使用EasyMock修改模拟方法的可变方法参数?

例如,我有一个使用BlockingQueue的类.我想模仿BlockingQueue成员进行单元测试.我的类调用方法queue.drainTo(Collection c).调用方法将从队列中删除元素并将其添加到集合中.我如何使用EasyMock模拟这种行为?例子很棒.

解决方法

您可以使用 andAnswergetCurrentArguments
  1. public void testDrainToQueue() {
  2. BlockingQueue<Foo> queue = EasyMock.createMock(BlockingQueue.class);
  3. EasyMock.expect(queue.drainTo(EasyMock.isA(List.class)))
  4. .andAnswer(new IAnswer<Integer>() {
  5. public Integer answer() {
  6. ((List) EasyMock.getCurrentArguments()[0]).add(new Foo(123));
  7. return 1; // 1 element drained
  8. }
  9. });
  10. EasyMock.replay(queue);
  11. ...
  12. }

有时候有助于提取辅助类或方法

  1. private static IAnswer<Integer> fakeDrainReturning(final List drainedElements) {
  2. return new IAnswer<Integer() {
  3. @Override public Integer answer() {
  4. ((List) EasyMock.getCurrentArguments()[0]).addAll(drainedElements);
  5. return drainedElements.size();
  6. }
  7. };
  8. }

然后你可以这样做:

  1. List<Foo> drainedElements = Arrays.asList(new Foo(123),new Foo(42));
  2. EasyMock.expect(queue.drainTo(EasyMock.isA(List.class)))
  3. .andAnswer(fakeDrainReturning(drainedElements));

最好使用真正的BlockingQueue,并找到一种方法,在您希望从队列中删除数据的方法之前将所需的值插入队列.

猜你在找的Java相关文章