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



我有一个返回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的Mock。

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

    这可以通过简单地用类型为Conn的附加参数替换Conn对象的内部实例化来实现。

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

    假设类Conn不是final,您可以使用规则的mocking frmeworks来创建Conn的mock,并在UnitTest中使用它。

相关内容

  • 没有找到相关文章

最新更新