【发布时间】:2015-06-25 01:23:56
【问题描述】:
我正在尝试使用 MockitoJUnitRunner.class 对我的班级进行单元测试
这是我的测试类中的代码 sn-p:
@RunWith(MockitoJUnitRunner.class)
public class AHCLIManagerTest {
@Mock
RObjectMapper objectMapper;
@Mock
AHCLIUpdateCommand ahcliUpdateCommandMock;
@InjectMocks
AHCLIManager underTest;
在我的主要课程中,我有:
@Service
public class AHCLIManager implements ProductionUpdateManager {
@Autowired
private RObjectMapper objectMapper;
@Autowired
private AHCLIUpdateCommand ahcliUpdateCommand;
当我尝试使用对象映射器从 JSON 字符串中读取对象时,如下所示,我得到一个 NullPointerException
JsonNode rootNode = objectMapper.readTree(requestJSON);
我尝试使用ReflectionTestUtils从Test类初始化objectMapper,如下所示,测试用例通过
ReflectionTestUtils.setField(underTest, "objectMapper", new RObjectMapper());
编辑:
另外,我使用MockitoAnnotations.initMocks()如下:
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
我不确定为什么 Mock 注入不起作用。
【问题讨论】:
-
您确定它在
objectMapper.readTree上失败了吗?还是在使用rootNode的线路上失败?如果您没有指定任何内容,则对方法的默认响应是返回null。如果您使用的是新实例化的对象(就像您使用ReflectionTestUtils一样,如果您注入的是完整实例而不是模拟对象,那么当然会成功。 -
@M.Deinum 感谢您对我投反对票。当我 6 小时前(发布后 5 分钟)回答这个问题时,OP 确实没有显示任何证据表明
initMocks()被调用,因此我的回答。 -
正如我在评论中提到的,由于使用了跑步者,你不需要,
initMocks只有当你不能使用跑步者时才需要。 -
@M.Deinum,是的,代码在使用 rootNode 的那一行失败了,但这肯定会发生,因为 objectMapper 没有实例化,因为当我使用 ReflectionTestUtils 时,它能够读取 json。
-
不,这不是...您正在使用模拟,正如我所说,模拟的默认值是在调用方法时返回
null。如果你不想要这个,你需要告诉模拟返回什么。你真的了解什么是模拟吗?
标签: java junit spring-boot mockito