【问题标题】:MockitoJUnit Test unable to instantiate mocked objectMockitoJUnit 测试无法实例化模拟对象
【发布时间】: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


【解决方案1】:

你的AHCLIManager中有对应的setter吗?

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

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

另一种可能性是您可能在您的设置方法中创建了AHCLIManager 的实例。如果您使用 @InjectMocks 注释,Mockito 将为您实例化 AHCLIManager

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多