嘲弄一个班级的私人领域

时间:2014-03-19 12:16:50

标签: java mockito powermock

我的课程中有以下字段

@Resource(name = "lobIdCancellationNodeMap")
private Map<String, List<String>> lobIdCancellationNodeMap;

在此行之后,我们直接访问了此字段 lobIdCancellationNodeMap

我无法使用Mockito为此设置值,并且没有可用于设置此值的construtor。

这就是它的使用方式

lobIdCancellationNodeMap.get(lobId)

我不允许更改实现类

2 个答案:

答案 0 :(得分:2)

虽然我同意其他用户的说明,测试一些不面向公众的东西似乎是错误的,但我确实对“我不被允许改变实施类”的情况表示同情。

@Resource注释旨在让应用程序在运行时注入实例。我建议你在运行时使用类似于应用程序的上下文来设置测试。这样,这个类将注入其资源。

如果失败,您可以使用Reflection将值设置为您需要的值。

答案 1 :(得分:1)

我已经使用spring框架提供的 ReflectionTestUtils 类解决了这个问题,你可以设置类的任何字段而不管它的访问修饰符。

ReflectionTestUtils.setField(mapper, "lobIdCancellationNodeMap", lobIdCancellationNodeMap);