【发布时间】:2021-05-02 07:29:38
【问题描述】:
我正在尝试使用 Testcontainers 和 junit5 在 SpringBoot 中为 Spring Data Elastisearch 存储库编写集成测试。但是测试失败了
org.springframework.beans.factory.UnsatisfiedDependencyException: 创建具有名称的 bean 时出错 'com.example.demo.AddressRepositoryTest':不满足的依赖关系 通过字段“存储库”表示;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 'com.example.demo.AddressRepository' 类型的限定 bean 可用:预计至少有 1 个符合 autowire 条件的 bean 候选人。依赖注解: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我该如何解决这个问题?我尝试了谷歌搜索,但找不到任何合适的内容。
DTO
@Data
@Document(indexName = "addresses")
public class Address {
String city;
String street;
GeoJsonPoint location;
}
存储库
@Repository
public interface AddressRepository extends ElasticsearchRepository<Address, String> {
}
测试AddressRepositoryTest.java
@ExtendWith(SpringExtension.class)
@Testcontainers
class AddressRepositoryTest {
private static final String ELASTICSEARCH_VERSION = "7.10.1";
static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(final ConfigurableApplicationContext configurableApplicationContext) {
}
}
@Container
public static ElasticsearchContainer container = new ElasticsearchContainer(DockerImageName
.parse("docker.elastic.co/elasticsearch/elasticsearch-oss")
.withTag(ELASTICSEARCH_VERSION));
@Autowired
AddressRepository repository;
@Autowired
private Config esConfig;
@BeforeEach
void setUp() {
container.start();
System.setProperty("elasticsearch.host", container.getContainerIpAddress());
System.setProperty("elasticsearch.port", String.valueOf(container.getMappedPort(9300)));
assertTrue(container.isRunning());
}
@AfterEach
void tearDown() {
container.stop();
}
@Test
void save() {
final Address address = new Address();
address.setCity("Some city");
address.setStreet("Some street");
address.setLocation(GeoJsonPoint.of(0, 0));
final Address save = repository.save(address);
}
}
【问题讨论】:
标签: java elasticsearch spring-data junit5 testcontainers