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。 如果可以的话,我强烈建议重写代码,以便不需要进行这种复杂的模拟。