当前位置: 首页 > 知识库问答 >
问题:

Spring数据MongoDB测试

顾英发
2023-03-14

我写了一个小的学习项目来使用MongoDB。我使用Spring数据获取Mongo存储库。创建RestController并通过Service(另一个类)使用MongoRepository从mongodb检索信息并将其呈现给浏览器是相当容易的。

public interface PersonRepository extends MongoRepository<Person, Integer> {
    List<Person> findByName(String name);
    @Query("{'name':{$regex:?0}}")
    List<Person> findByNameLike(String nameLike);
    //the rest of methods
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppConfig.class})
public class TestMongo {

    private static final Logger LOG = LoggerFactory.getLogger(TestMongo.class);

    @Autowired
    private PersonRepository personRepository;

    @Before
    public void setUp() {
        Technology technology1 = new Technology("Java-7");
        Technology technology2 = new Technology("Java-8");
        Technology technology3 = new Technology("Hibernate");
        Technology technology4 = new Technology("MyBatis");
        Technology technology5 = new Technology("Spring Data");

        Project project1 = new Project(1, "POINT", Arrays.asList(technology1, technology3));
        Project project2 = new Project(2, "Forecast", Arrays.asList(technology1, technology4));
        Project project3 = new Project(3, "CPM", Arrays.asList(technology2, technology5));

        Person person1 = new Person(1, "Alex", 27, Arrays.asList(project1, project3));
        Person person2 = new Person(2, "Ivan", 26, Arrays.asList(project2, project3));
        Person person3 = new Person(3, "Andrii", 31, Arrays.asList(project1));

        personRepository.save(Arrays.asList(person1, person2, person3));
    }

    @Test
    public void count() {
        List<Person> all = personRepository.findAll();
        LOG.info("There are " + all.size() + " person(s) in database");
        assertThat(all.size(), equalTo(3));
    }

    @Test
    public void findByName() {
        List<Person> personList = personRepository.findByName("Ivan");
        LOG.info("*******Find by name********");
        LOG.info("personList {}", personList);
        LOG.info("***************************");
        assertThat(personList, hasSize(1));
    }

    //another test methods

    @After
    public void shutDown() {
        personRepository.deleteAll();
    }
}
@Configuration
@EnableMongoRepositories
@ComponentScan
public class AppConfig {

    @Bean
    public MongoClient mongoClient() {
        return new MongoClient("localhost", 27017);
    }

    @Bean
    public MongoTemplate mongoTemplate() {
        return new MongoTemplate(mongoClient(),"my-mongo");
    }
}

现在我的问题是:我实际上不想在我存储数据的同一个数据库上运行一些测试。此外,我有一个重要的方法PersonRepository.deleteAll(),在此之后,所有数据都将消失。我发现嵌入式mongodb是一种解决方案,但一旦将其添加到pom.xml中,我就再也看不到已安装的数据库了。因此,问题是是否可以在同一台机器上同时安装和嵌入mongodb,如果不能,如何在不修改prod数据的情况下测试我的MongoRepository。

共有1个答案

孙项禹
2023-03-14

看来我找到了我所缺少的东西:

 <dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo</artifactId>
    <version>1.50.5</version>
    <scope>test</scope>
 </dependency>

简单地添加scope test就是启动我的嵌入式mongodb仅用于测试,而我仍然使用已安装的mongodb for Prod。

 类似资料:
  • 我有以下数据模型 和spring数据存储库接口 但findByIdIn方法返回一个空列表,即使mongodb中存在ID。我已经为文档中的其他字段测试了findbyxxin(),它们都工作得很好。但当涉及到文档id时,情况并非如此。 这是我第一次使用mongoDB,但我熟悉Spring data jpa。 我知道 但我还需要对结果应用分页,因此对我的情况没有帮助。 我尝试使用@Query(带有in查

  • UserRepository如下所示: 我得到以下异常: 无法实例化[...Repository.UserRepository]:指定的类是接口 我的CustomerRepository如下所示(带有@configuration注释): 实际上,我不知道为了让测试运行,我需要哪些注释--也许您会有另一个建议,以便我可以解决这个问题。

  • 本文向大家介绍c# 插入数据效率测试(mongodb),包括了c# 插入数据效率测试(mongodb)的使用技巧和注意事项,需要的朋友参考一下 mongodb的数据插入速度是其一个亮点,同样的10000条数据,插入的速度要比Mysql和sqlserver都要快,当然这也是要看使用者怎么个使用法,你代码如果10000次写入使用10000次连接,那也是比不过其他数据库使用事务一次性提交的速度的。 同样

  • 我正在使用spring数据与mongodb通信,我正在寻找一种执行地理查询的方法,该方法将通过DB中给定的地理点检索附近的纵断面,我对查询的要求如下: 1) 按距离限制2)按返回的配置文件数量限制3)根据配置文件文档中的时间字段进行额外搜索4)从检索到的文档中包括/排除字段的能力 起初我用mongoTemplate.geo接近法... 但是后来我意识到mongo不支持在Geo近东查询中包含/排除字

  • 我正在尝试使用查询搜索出生日期 我如何才能搜索dob在等位日期格式?

  • 有人知道如何使用Spring-Data将下面的聚合函数转换成java代码吗?