MockitoJUnit Test无法实例化模拟对象

时间:2015-06-25 01:23:57

标签: java junit spring-boot mockito

我尝试使用 MockitoJUnitRunner.class

对我的班级进行单元测试

这是我的测试类中的代码段:

@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注射为什么不起作用。

2 个答案:

答案 0 :(得分:0)

您的AHCLIManager中是否有相应的制定者?

如果我没记错的话,@InjectMocks所做的只是通过setter注入@Mock声明的匹配类型的模拟对象。 Mockito没有根据@Autowired做任何事情。

(它与使用MockitoJUnitRunner或调用MockitoAnnotations.initMocks()无关)

另一种可能性是您可能在设置方法中创建了AHCLIManager的实例。如果您使用AHCLIManager

注释,Mockito将为您实例化@InjectMocks

答案 1 :(得分:0)

您正在使用不同的策略来创建模拟。您应该使用MockitoJUnitRunnerMockitoAnnotations.initMocks方法。