繁体   English   中英

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

[英]How to test static void functions using 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”? 需要帮助。

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

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

您有两种解决方案:

  1. 屈服于 不良的设计,并使用 Powermock 注入Conn模拟。

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

    这是可以做到通过简单地取代的内实例化Conn与类型的附加参数对象Conn

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

    鉴于Conn类不是final您可以使用常规的模拟frmeworks创建Conn模拟并在您的UnitTests中使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM