Mockito与局部变量

时间:2013-05-12 10:08:55

标签: java unit-testing junit mocking 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<String> listOfGift = new ArrayList<String>();

        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时,我该如何测试。

1 个答案:

答案 0 :(得分:3)

这并不容易。

您需要使用类似powermock的内容。

使用powermock,你创建一个场景然后调用方法并播放它,这意味着你可以告诉ArrayList类构造函数预期被调用并返回mock而不是真实{ {1}}。

这将允许您在ArrayList上声明。

这样的事情应该有效:

mock

因此,当您的方法创建本地ArrayList listMock = createMock(ArrayList.class); expectNew(ArrayList.class).andReturn(listMock); powermock时,实际上会返回您的模拟List

更多信息here

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