Mockito有局部变量

我有一个返回String的简单方法。

它还会创建一个本地List 。 我想测试添加到本地List的值。

这是一个例子

 package com.impl; import java.util.ArrayList; import java.util.List; import com.test.domain.CustomerVo; public class ClassImpl { public String assignGift(CustomerVo customerVo) { List listOfGift = new ArrayList(); if (customerVo.getName().equals("Joe")) { listOfGift.add("ball"); } else if ((customerVo.getName().equals("Terry"))) { listOfGift.add("car"); } else if (customerVo.getName().equals("Merry")) { listOfGift.add("tv"); }else { listOfGift.add("no gift"); } return "dummyString"; } } 

customerVo.getName.equals("Terry")car被添加到本地List时,如何测试。

这并不容易。

你需要使用像powermock这样的东西 。

使用powermock,您可以在调用方法之前创建一个场景并播放它,这意味着您可以告诉ArrayList类构造函数预期被调用并返回mock而不是真实的ArrayList

这将允许您在mock上断言。

这样的事情应该有效:

 ArrayList listMock = createMock(ArrayList.class); expectNew(ArrayList.class).andReturn(listMock); 

因此,当您的方法创建本地List powermock将实际返回您的模拟List

更多信息在这里 。

这种模拟实际上是对未编写为可测试的遗留代码的unit testing。 如果可以的话,我强烈建议重写代码,以便不需要进行这种复杂的模拟。