gpt4 book ai didi

java - Jenkins 构建中嵌入式 Mongo DB 测试的 UnknownHostException

转载 作者:行者123 更新时间:2023-12-04 00:51:00 25 4
gpt4 key购买 nike

我有一个 Spring Boot REST 服务和一些为数据层编写的单元测试。我使用嵌入式 MongoDB 依赖项为我的 Repository 类执行基本的 CRUD 测试:

public interface UserRepository extends MongoRepository<UserEntity, String> {
Optional<UserEntity> findByUsername(String username);
}
我从 JSON 文件(位于 test/java/resources/data 下)并在 ObjectMapper 的帮助下加载数据。例如,我在每次测试之前将数据加载到嵌入式数据库中,并在完成后删除集合:
@DataMongoTest
class UserRepositoryTest {

// the path to the JSON file
private final File USER_DATA_JSON = Paths.get("src", "test", "resources", "data", "UserData.json").toFile();

// used to load a JSON file into a list of Users
private final ObjectMapper objectMapper = new ObjectMapper();

@Autowired
private MongoTemplate mongoTemplate; // makes the interaction with the embedded MongoDB much easier

@Autowired
private UserRepository userRepository;

@BeforeEach
void setUp() throws IOException {
// deserialize the JSON file to an array of users
UserEntity[] users = objectMapper.readValue(USER_DATA_JSON, UserEntity[].class);

// load each user into embedded MongoDB
Arrays.stream(users).forEach(mongoTemplate::save);
}

@AfterEach
void tearDown() {
// drop the users collection
mongoTemplate.dropCollection("users");
}

@Test
void testFindAllSuccess() {
// WHEN
List<UserEntity> users = userRepository.findAll();

// THEN
assertEquals(2, users.size(), "findAll() should return 2 users!");
}

// other test methods
}
在我的本地环境中,一切正常, application.properties 内部不需要任何配置文件。但是当我在 Jenkins 上执行构建时,所有存储库测试都会出现以下错误:
UserRepositoryTest > testFindAllSuccess() FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:132
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:800
Caused by: org.springframework.beans.factory.BeanCreationException at ConstructorResolver.java:658
Caused by: org.springframework.beans.BeanInstantiationException at SimpleInstantiationStrategy.java:185
Caused by: java.net.UnknownHostException at InetAddress.java:1642
Caused by: java.net.UnknownHostException at Inet6AddressImpl.java:-2
build.gradle文件依赖声明如下:
implementation 'org.openapitools:openapi-generator-gradle-plugin:5.0.0'
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation "io.springfox:springfox-boot-starter:3.0.0"
implementation('org.modelmapper:modelmapper:2.3.0')
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo'
testImplementation 'io.projectreactor:reactor-test'
compile 'io.springfox:springfox-swagger-ui:3.0.0'
annotationProcessor group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'
compile 'org.mongodb:mongodb-driver-sync'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.security:spring-security-test'
// https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt
implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'
我假设 Spring Boot 不再识别嵌入式 MongoDB。如何配置尽可能简单?
我看到有可能使用容器化 MongoDB 并使用 @TestContainers 对其进行测试。 ,但现在我需要解决这个问题,因为每个构建都因测试而失败。
后期编辑:通过激活 --debug运行构建时 Jenkins 中的选项,我发现了以下原因:
java.net.UnknownHostException: dev096.dev.cloud.******.eu: dev096.dev.cloud.******.eu: Name or service not known
你知道我是否必须将该地址添加到我的本地机器(etc/hosts)的已知主机中,还是应该使用配置文件在本地配置( localhost 用于开发, dev096.dev.cloud.******.eu 用于生产)?

最佳答案

我设法在本地重现了同样的错误,如果你还没有解决它,这是我的看法。
删除所有 MongoDB 自定义配置/属性,然后将以下类添加到您的项目中:

@Configuration
public class MongoTestConfig {

@Bean
MongoProperties properties() {
MongoProperties mongoProperties = new MongoProperties();
mongoProperties.setPort(33333);
mongoProperties.setHost("localhost");
return mongoProperties;
}
}
确保使用以下三个注释标记您的测试类 (UserRepositoryTest):
@RunWith(SpringRunner.class)
@DataMongoTest
@Import(MongoTestConfig.class)
@DataMongoTest 忽略所有其他 bean 定义,因此我们强制测试包含我们刚刚使用显式 @Import 创建的配置。
现在测试将被迫在本地主机上运行。希望它对你有用,就像对我一样! 😁

关于java - Jenkins 构建中嵌入式 Mongo DB 测试的 UnknownHostException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66673058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com