模拟对象返回null

时间:2019-10-10 09:48:07

标签: java mockito

我正在嘲笑这样的对象:

    @InjectMocks
    private AuroraRepoImpl auroraRepo;

    @Mock
    private Connector4AuroraDB connector4AuroraDB;

AuroraRepoImpl是类,connector4AuroraDB是我需要模拟的对象。 但是当呼叫转到connector4AuroraDB时,而不是被模拟而是返回null

使用方法如下:

Connection connection = connector4AuroraDB.openConnection();

它正在抛出NullPointerException。 知道如何模拟吗?

1 个答案:

答案 0 :(得分:1)

从注释中可以看出,Connector4AuroraDB由Spring(@Autowired)自动装配。 在我看来,您正在使用字段注入,这使得很难进行存根依赖。

我认为您有类似的东西:

public class AuroraRepoImpl {
  @Autowired private Connector4AuroraDB connector4AuroraDB;
}

要使其正常工作,您需要一个Spring上下文设置,以便Spring可以调查bean注册表以找到依赖项。

您的示例是使用MockitoJUnitRunner运行的简单单元测试。 您应该更改实现以使用构造函数注入,这样Mockito可以注入依赖项:

public class AuroraRepoImpl {
  private final Connector4AuroraDB connector;

  @Autowired
  public AuroraRepoImpl(final Connector4AuroraDB connector) {
    this.connector = connector;
  }
}

如果您使用新的Spring版本,并且该类只有一个构造函数,甚至可以省略@Autowired注释。