我有一个返回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
对象的实例化。
根据经验,业务代码不应负责获取必须与之通信的依赖关系。
您有两种解决方案:
-
屈服于糟糕的设计,并使用
Powermock注入Conn
的Mock。 -
改进您的设计并使用依赖项注入/控制反转。
这可以通过简单地用类型为
Conn
的附加参数替换Conn
对象的内部实例化来实现。但更好的方法是将
static
方法转换为常规的非静态成员方法,并将Conn
的实例作为构造函数参数传递给private final
成员变量。假设类
Conn
不是final
,您可以使用规则的mocking frmeworks来创建Conn
的mock,并在UnitTest中使用它。