use*_*128 4 junit mongodb spring-data-mongodb spring-boot
我目前在 Spring 应用程序中使用 MongoDB。由于我添加了 Mongo,由于以下错误,我的端点测试不再起作用:
No qualifying bean of type 'xxx' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
Run Code Online (Sandbox Code Playgroud)
我在控制器中自动装配的存储库如下:
private final RuleRepository ruleRepository;
@Autowired
public TestController(RuleRepository ruleRepository) {
this.ruleRepository = ruleRepository;
}
Run Code Online (Sandbox Code Playgroud)
我认为这与 Mongo 以及我目前使用 AutoConfiguration 的事实有关。对于测试,我将 Flapdoodle Embed Mongo 依赖项添加到我的 pom.xml 中,并将范围设置为 test:
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<version>2.0.3</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我的测试类如下所示:
RunWith(SpringRunner.class)
@WebMvcTest(value = RouteController.class, secure = false)
@ActiveProfiles("test")
public class TestControllerEndpointTests {
@Autowired
private MockMvc mockMvc;
@Autowired
private RuleRepository ruleRepository;
@Before
public void setupTests() {
//Setup for the tests
}
//Actual tests
}
Run Code Online (Sandbox Code Playgroud)
我还为 Mongo 测试数据库创建了一个 Configuration 类,但我不知道如何正确注册它:
@Configuration
@Profile("test")
public class TestMongoConfig {
@Autowired
private MongoProperties properties;
@Autowired(required = false)
private MongoClientOptions options;
@Bean(destroyMethod = "close")
public Mongo mongo(MongodProcess mongodProcess) throws IOException {
Net net = mongodProcess.getConfig().net();
return new MongoClient(net.getServerAddress().getHostName(), net.getPort());
}
@Bean(destroyMethod = "stop")
public MongodProcess mongodProcess(MongodExecutable mongodExecutable) throws IOException {
return mongodExecutable.start();
}
@Bean(destroyMethod = "stop")
public MongodExecutable mongodExecutable(MongodStarter mongodStarter, IMongodConfig iMongodConfig) throws IOException {
return mongodStarter.prepare(iMongodConfig);
}
@Bean
public IMongodConfig mongodConfig() throws IOException {
return new MongodConfigBuilder().version(Version.Main.PRODUCTION).build();
}
@Bean
public MongodStarter mongodStarter() {
return MongodStarter.getDefaultInstance();
}
}
Run Code Online (Sandbox Code Playgroud)
如何获得使用 @WebMvcTest 注释的端点测试以使用嵌入式 Mongo 数据库?
敲了一阵子后,我们找到了@AutoConfigureDataMongo注释。
import org.springframework.boot.test.autoconfigure.data.mongo.AutoConfigureDataMongo;
@RunWith(SpringRunner.class)
@WebMvcTest(value = SampleController.class, secure = false)
@AutoConfigureDataMongo
public class SampleControllerTest {
Run Code Online (Sandbox Code Playgroud)
只需用它注释您的控制器,您应该org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo在运行此控制器测试时看到日志。
| 归档时间: |
|
| 查看次数: |
1342 次 |
| 最近记录: |