我有一个返回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”? 在这方面需要帮助。
答案 0 :(得分:1)
这里的问题是隐藏依赖性,即Conn
对象的实例。
根据经验,业务代码不应该负责获取必须与之通信的依赖项。
您有两种解决方案:
屈服于错误的设计,并使用 Powermock 注入Conn
的模拟物。
改进您的设计并使用依赖注入/控制反转。
这可以通过简单地将Conn
对象的内部实例替换为类型为Conn
的其他参数来实现。
更好的方法是将您的static
方法转换为常规的非静态成员方法,并将Conn
的实例作为构造函数参数传递给private final
成员变量中。
鉴于类Conn
不是final
,您可以使用常规模拟frmeworks创建Conn
的模拟并将其用于您的UnitTests。