我正在为 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());
}
如果你想依赖@MockBean和Spring注入,也许你应该考虑用本地dynamodb制作一个
@SpringBootTest
。