我在Java编程,我的应用程序正在做很多使用DB。因此,重要的是我能够轻松地测试我的数据库使用。

什么是数据库测试?对我来说,他们应该提供两个简单的要求:

>验证SQL语法。

>更重要的是,根据给定的情况检查数据是否被正确选择/更新/插入。

那么,看来我需要的是一个DB。

但实际上,我不喜欢,因为使用DB进行测试有几个困难:

>“只是给自己一个测试DB,它有多难? – 好吧,在我的工作地点,有一个个人测试DB是很不可能的。你必须使用一个“公共”数据库,所有人都可以访问。

>“这些测试肯定不是很快…” – DB测试往往比通常的测试慢。慢慢测试真的不理想。

>“这个程序应该处理任何情况! – 它变得有点恼人,甚至不可能尝试和模拟每个案例在一个数据库。对于每种情况,应该进行一定量的插入/更新查询,这是烦人的,需要时间。

>“等一下,你怎么知道那个表中有542行?” – 测试的主要原则之一是能够以不同于测试代码的方式测试功能。当使用DB时,通常有一种方法来做某事,因此测试与核心代码完全相同。

所以,你可以弄清楚,我不喜欢DBs,当谈到测试(当然,我必须得到这一点,但我宁愿到那里我的测试,后我发现大多数错误使用其余的测试方法)。但我正在寻找什么?

我正在寻找一种方法来模拟一个数据库,一个模拟DB,使用文件系统或只是虚拟内存。我认为也许有一个Java工具/包允许简单地构建(使用代码接口)DB模拟每个测试,模拟表和行,SQL验证,并与代码接口监视其状态(而不是使用SQL )。

你熟悉这种工具吗?

编辑:感谢您的答案!虽然我要求一个工具,你也提供了一些提示,关于这个问题:)它将需要我一些时间检查你的优惠,所以我不能说现在是否你的答案是不满意。

无论如何,这里是一个更好的看法我正在寻找 – 想象一个名为DBMonitor的类,其功能之一是找到表中的行数。这里是一个虚构的代码,我如何使用JUnit测试该功能:

public class TestDBMonitor extends TestCase {

@Override

public void setUp() throws Exception {

MockConnection connection = new MockConnection();

this.tableName = "table1";

MockTable table = new MockTable(tableName);

String columnName = "column1";

ColumnType columnType = ColumnType.NUMBER;

int columnSize = 50;

MockColumn column = new MockColumn(columnName, columnType, columnSize);

table.addColumn(column);

for (int i = 0; i < 20; i++) {

HashMap fields = new HashMap();

fields.put(column, i);

table.addRow(fields);

}

this.connection = connection;

}

@Test

public void testGatherStatistics() throws Exception {

DBMonitor monitor = new DBMonitor(connection);

monitor.gatherStatistics();

assertEquals(((MockConnection) connection).getNumberOfRows(tableName),

monitor.getNumberOfRows(tableName));

}

String tableName;

Connection connection;

}

我希望这段代码足够清楚我的想法(对不起语法错误,我是手动输入没有我亲爱的Eclipse:P)。

顺便说一句,我使用ORM部分,我的原始SQL查询是相当简单,不应该从一个平台到另一个不同。

java如何做测试数据库_如何模拟用于测试的数据库(Java)?相关推荐

  1. java 写文件 权限不够_教你解决Linux系统中JAVA创建文件后权限不足的问题

    在作业中,项目使用文件上传. 这个功能很常见. 当Kai Ge今天更改其官方帐户时,他遇到了一个问题,即无法访问下载的文件,也无法通过浏览器访问该文件. 它是怎么发生的? 经过许多问题之后,事实证明这 ...

  2. 夜神模拟器模拟安卓测试_使用模拟进行测试

    夜神模拟器模拟安卓测试 如果使用正确的方法,模拟对象将非常有用. 我在需要驱动软件开发使用的帖子中分享了一些使用Mock Objects的经验. 在这篇文章中,我分享了两件事 –使用模拟进行基于合同的 ...

  3. 怎样编写测试类测试分支_编写干净的测试–天堂中的麻烦

    怎样编写测试类测试分支 如果我们的代码有明显的错误,我们很有动力对其进行改进. 但是,在某些时候,我们认为我们的代码"足够好"并继续前进. 通常,当我们认为改进现有代码的好处小于所 ...

  4. 怎样编写测试类测试分支_编写干净的测试-被认为有害的新内容

    怎样编写测试类测试分支 很难为干净的代码找到一个好的定义,因为我们每个人都有自己的单词clean的定义. 但是,有一个似乎是通用的定义: 简洁的代码易于阅读. 这可能会让您感到有些惊讶,但我认为该定义 ...

  5. 打开数据库_打开这份指南,数据库运维也能优雅、简单!

    对于常规数据库的运维监控来说,如何能够快速简洁的发现问题,直达问题本质并解决常见问题,是 Bethune 的安身立命之本. 简约,优雅,专业,直抵本心,这是用户对 Bethune 的评价. Bethu ...

  6. spring 多个数据库_在Spring使用多个数据库

    spring 多个数据库 在开发企业应用程序时,我们经常面临访问多个数据库的挑战. 也许我们的应用程序必须将数据归档到某个数据仓库中,或者也许它必须将数据传播到某个第三方数据库. 使用Spring可以 ...

  7. python读取erp的数据库_【ERP系统设计】【数据库设计】对数据表重命名和读取建表的SQL语句...

    今天做了一个小Model,就是把另一数据库中的表复制到目标数据库中,但是复制到目标数据库中的表中的记录为空 思路: 1 读取建表的SQL语句 2 通过jdbc执行 3 对新建表进行重新命名 精要: 1 ...

  8. java技术全掌握了_你必须掌握的 21 个 Java 核心技术!

    写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE ...

  9. java list有序还是无序_牛批!2w字的Java集合框架面试题精华集(2020最新版),赶紧收藏。...

    一个多月前,作者和一些小伙伴决定做一系列的 Java 知识点常见重要问题的小册,方便用来夯实基础!小册的标准就一个,那就是:取精华,取重点.每一本小册,我们都会充分关注我们所总结的知识点是否达到这个标 ...

最新文章

  1. Web App、Hybrid App与Native App的设计差异
  2. 延迟环境变量扩展(bat)
  3. 渐统江湖的项目原型生成工具 -- Maven Archetype
  4. mysql经常问到的面试题_20道BAT面试官最喜欢问的JVM+MySQL面试题(含答案解析)...
  5. boost::function和boost:bind取代虚函数
  6. vue路由传参的三种基本方式 - 流年的樱花逝 - SegmentFault 思否
  7. 日发帖 发帖频率 发帖时段_先发帖
  8. Vue的调试工具(Chrome 浏览器)配置
  9. 国际著名密码学专家来学嘉:区块链对密码学的两大贡献
  10. ai审计_用于内部审计和风险管理的人工智能
  11. JavaScript函数实例(一)
  12. VS 2015专业版密钥
  13. Pixelization论文与应用简介:像素艺术像素化算法
  14. 今日新闻快讯摘要十条
  15. 高并发访问数据库问题
  16. 国家网络安全周|2022网络安全知识答题
  17. 如何用html制作快速邮箱发到手机qq,简单两步使用node发送qq邮件的方法
  18. 芯片分享——MS9601A
  19. 什么是JavaBeans
  20. excel切片器_用Excel切片器做自动化表格,动态呈现,瞬间高大上

热门文章

  1. RocketMQ集群搭建-4.2.0版本
  2. [PHP] 超全局变量$_FILES上传文件
  3. 最近项目用到Dubbo框架,临时抱佛脚分享一下共探讨(转)
  4. Linux下MySQL链接被防火墙阻止
  5. 影响软件开发的两个关键性的问题
  6. 细节决定成败:一个公共类库
  7. jsp实现mysql存储过程_JSP调用MySQL存储过程收藏
  8. Java应用梯度下降求解线性SVM模型参考代码
  9. Leetcode 217. 存在重复元素 解题思路及C++实现
  10. Android中Intent和Intent过滤器详解