问题描述
我们正在将Spring Boot应用程序从2.2.5 / 7升级到2.3.3,并看到Flapdoodle嵌入式MongoDb的单元测试失败,并显示错误消息request fails with authentication failure message
请问有什么建议/解决办法
Spring Boot应用程序具有以下内容:
spring boot : 2.3.3
spring-boot-starter-data-mongodb : 2.3.3
mongodb-driver-core : 4.0.5
mongodb-driver-sync : 4.0.5
de.flapdoodle.embed.mongo - 2.2.0
de.flapdoodle.embed.process - 2.1.2
我们有正在执行简单CRUD操作的应用程序存储库。
测试类定义。
_@RunWith(SpringRunner.class)
@DataMongoTest
@activeprofiles({ "unit-test","integration-test"})
public class ScopeRepositoryTest {
@Autowired
private ScopeRepository scopeRepository;
private Scope scope1;
@Before
public void setup() {
scopeRepository.deleteAll();
}
}_
当我们执行测试用例时,测试用例在启动时失败,并出现以下错误:
Thread-3] o.s.b.a.mongo.embedded.EmbeddedMongo : 2020-08-26T14:00:21.257+0530 I ACCESS [conn2] SCRAM-SHA-1 authentication failed for admin on admin from client 127.0.0.1:56763 ; UserNotFound: Could not find user admin@admin. admin/admin are username/password of local db name as admin
使用较早版本的spring boot 2.2.5 / 7和相关的mongodb软件包,它可以正常工作。
解决方法
如果嵌入式 mongo 发现正在使用的凭据(例如我的凭据在应用程序 yml 中默认具有凭据),则它会以 auth 模式启动,我使用了另一个测试 spring 配置文件并将 @ActiveProfiles("test") 添加到我的测试类中
spring:
config:
activate:
on-profile: default
data:
mongodb:
database: test_db
username: adminuser
password: adminpwd
host: localhost
port: 27012
---
spring:
config:
activate:
on-profile: test