首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java数据库测试

Java数据库测试
EN

Stack Overflow用户
提问于 2017-03-07 16:48:18
回答 1查看 566关注 0票数 0

我目前正在工作的项目中使用ES 5和Jest,我被分配到与DB交互的类上进行集成和单元测试。

我有一个这样的方法:

代码语言:javascript
复制
 @Override
public Aptitude save(Aptitude aptitude) {
    Index index = new Index.Builder(aptitude).index(aptitudeIndexName).type(aptitudeTypeName).refresh(true).build();
    try {
        client.execute(index);
        return aptitude;
    } catch (IOException e) {
        logger.error("The aptitude couldn't be saved in the data base " + e.getMessage());
        throw new RuntimeException(e);
    }
}

或者像这样的:

代码语言:javascript
复制
@Override
public List<Aptitude> findAll() {
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    searchSourceBuilder.sort("id", SortOrder.ASC);

    Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(aptitudeIndexName).build();

    try {
        SearchResult result = client.execute(search);

        if (!result.isSucceeded()) {
            return null;
        }

        List<Hit<Aptitude, Void>> aptitudes = result.getHits(Aptitude.class);
        return aptitudes.stream().map(this::getAptitude).collect(Collectors.toList());
    } catch (IOException e) {
        logger.error("The search couldn't be executed" + e.getMessage());
        throw new RuntimeException(e);
    }
}

我的任务是编写一些测试(单元和集成),以确保我的所有课程都能正常工作,并且有更好的测试覆盖率,我在网上搜索了一些ES测试,但能够很好地理解我应该如何进行测试。

我做了一些像这样的测试:

代码语言:javascript
复制
@Test
public void aptitudeSaveDelete() {
    Aptitude aptitude = new Aptitude();
    aptitude.setId(1993L);
    aptitude.setEn("ENaptitudeEN");
    aptitude.setEs("ESaptitudeES");
    Aptitude aptitudeSaved = elasticsearchAptitudeRepository.save(aptitude);

    assertEquals(aptitude.getEs(), aptitudeSaved.getEs());
    assertEquals(aptitude.getEn(), aptitudeSaved.getEn());
    assertEquals(aptitude.getId(), aptitudeSaved.getId());

    Aptitude aptitudeFoundById = elasticsearchAptitudeRepository.findById(String.valueOf(aptitude.getId()));

    assertEquals(aptitude.getId(), aptitudeFoundById.getId());
    assertEquals(aptitude.getEn(), aptitudeFoundById.getEn());
    assertEquals(aptitude.getEs(), aptitudeFoundById.getEs());

    boolean wasDeleted;
    wasDeleted = elasticsearchAptitudeRepository.deleteAptitudeById(String.valueOf(aptitude.getId()));
    assertEquals(true, wasDeleted);
}

但是我的同事告诉我,这种测试损害了DB,如果他们出了问题,那么DB将不得不手动修复。

这就是为什么我在这里不知所措,任何帮助都会被接受。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-07 17:08:41

首先,不应该测试框架。你应该测试你的代码。我的地图是对的吗?

第二:即使以前的测试失败,每个集成测试都应该使DB处于已知状态。

我通常使用DBunit进行数据填充和评估。

他们的最佳实践引文

  • 每个开发人员使用一个数据库实例
  • 好的设置不需要清理!
  • 使用多个小数据集
  • 为整个测试类或测试套件执行一次陈旧数据的设置。

注:我还没有使用弹性搜索。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42653797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档