@MockBean 在 Spring Boot 单元测试中没有正确注入依赖

问题描述 投票:0回答:1

我正在为 Spring Boot 应用程序进行单元测试。我有一个

MetricsLogger
DI 在服务代码中工作正常,但未能通过单元测试,因为它在测试中为空。尽管使用@MockBean,注入的依赖项(MetricsLogger)仍然为空并给我NPE。我不确定在单元测试中初始化存储库时如何处理 DI。谢谢您的任何建议!

这是服务代码

public class Repository {
  private final DynamoDbTable<Record> table;
  @Qualifier("RepositoryMetricsLogger")
  @Autowired
  private MetricsLogger metricsLogger;

  public Repository(DynamoDbEnhancedClient client, String tableName) {
    this.table = client.table(tableName, TableSchema.fromClass(Record.class));
  }
}

这是 MetricLog 配置

@Data
@Component
public class MetricConfig {

    @Bean("RepositoryMetricsLogger")
    public MetricsLogger repositoryMetricsLogger() {
        return Metrics.getMetricsLogger("Repository"); 
    }

这是测试代码

@ExtendWith(SpringExtension.class)
public class RepositoryTest {
  private static final DynamoTableLocalFixture ddbLocal =
      new DynamoTableLocalFixture();

  private Repository repository;

  @MockBean
  private MetricsLogger metricsLogger;
  @BeforeEach
  public void setup() {
    MockitoAnnotations.openMocks(this);
    ddbLocal.createTable();
    DynamoDbEnhancedClient ddbLocalEnhancedClient = DynamoDbEnhancedClient.builder()
        .dynamoDbClient(ddbLocal.getDynamoDBClient())
        .build();

    repository = new Repository(ddbLocalEnhancedClient, ddbLocal.getTableName());
  }
spring spring-boot unit-testing junit mockito
1个回答
0
投票

如果你想依赖@MockBean和Spring注入,也许你应该考虑用本地dynamodb制作一个

@SpringBootTest

© www.soinside.com 2019 - 2024. All rights reserved.