Joh*_*eke 10 mongodb spring-data-mongodb spring-boot
在我的Spring Boot Web应用程序中,我使用MongoDB来存储数据.在应用程序中,我使用扩展的接口访问数据库MongoRepository.
如何为此类存储库类设置单元测试?我想要的是
我尝试过使用Embedded MongoDB,但我无法弄清楚如何从文件中插入testdata.我也尝试使用NoSQLUnit,但SpringApplicationConfiguration与单元测试配置冲突,导致不同的数据库进行读写.
只需使用Spring Boot 中的@DataMongoTest即可。
@RunWith(SpringRunner.class)
@DataMongoTest
public class FooRepositoryTest {
@Autowired
FooRepository fooRepository;
@Before
public void setUp() throws Exception {
fooRepository.save(new Foo());
}
@Test
public void shouldBeNotEmpty() {
assertThat(fooRepository.findAll()).isNotEmpty();
}
}
Run Code Online (Sandbox Code Playgroud)
依赖关系
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
2018 和 Spring Boot 2 的更新。首先,您可以根据文档对嵌入式数据库进行仅数据集成测试。这使用DataMongoTest注释。这仅配置使 mongoDB 测试成为可能的必要依赖项。
如果要进行完整的集成测试,请添加AutoConfigureDataMongo注释:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@AutoConfigureDataMongo
public class PriceApiControllerIT {
Run Code Online (Sandbox Code Playgroud)
你应该在你的依赖项pom.xml:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,我们使用一个单独的 MongoConfiguration 类来为我们的测试指定特定的配置。
您可以使用 EmbeddedMongoBuilder 创建嵌入式 mongo 实例,如下所示:
import com.mongodb.Mongo;
import cz.jirutka.spring.embedmongo.EmbeddedMongoBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.net.ServerSocket;
@Configuration
public class MongoConfiguration {
@Bean
public Mongo mongo() throws IOException {
System.setProperty("DB.TRACE","true");
return new EmbeddedMongoBuilder()
.version("2.13.1")
.bindIp("127.0.0.1")
.port(allocateRandomPort())
.build();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的测试类中,指定您想要通过 @Import 注释使用该特定配置:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@Import(MongoConfiguration.class)
Run Code Online (Sandbox Code Playgroud)
希望有帮助。
| 归档时间: |
|
| 查看次数: |
6358 次 |
| 最近记录: |