如何使用Powermock easyMock测试静态void函数?

时间:2018-07-11 07:33:00

标签: java junit powermock easymock

我有一个返回void的静态函数。

此功能执行一些操作并在内部填充地图。

像这样...

public static void doSomething(arg1,arg2,arg3) {
    //Do some processing with the input parameters

    if(arg1 satisfies given condition) {
        //Create object
        Conn conn = new Conn()

        Map<String, List<String>> map = new Map();

        //Populate the map with the processed value

        conn.setAttributes(map);
    }
}

现在,我想测试是否满足条件,即是否用期望值填充了“ conn”对象中的“ map”? 在这方面需要帮助。

1 个答案:

答案 0 :(得分:1)

这里的问题是隐藏依赖性,即Conn对象的实例。

根据经验,业务代码不应该负责获取必须与之通信的依赖项。

您有两种解决方案:

  1. 屈服于错误的设计,并使用 Powermock 注入Conn的模拟物。

  2. 改进您的设计并使用依赖注入/控制反转

    这可以通过简单地将Conn对象的内部实例替换为类型为Conn的其他参数来实现。

    更好的方法是将您的static方法转换为常规的非静态成员方法,并将Conn的实例作为构造函数参数传递给private final成员变量中。

    鉴于类Conn不是final,您可以使用常规模拟frmeworks创建Conn的模拟并将其用于您的UnitTests。

相关问题