java如何做测试数据库_如何模拟用于测试的数据库(Java)?
我在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)?相关推荐
- java 写文件 权限不够_教你解决Linux系统中JAVA创建文件后权限不足的问题
在作业中,项目使用文件上传. 这个功能很常见. 当Kai Ge今天更改其官方帐户时,他遇到了一个问题,即无法访问下载的文件,也无法通过浏览器访问该文件. 它是怎么发生的? 经过许多问题之后,事实证明这 ...
- 夜神模拟器模拟安卓测试_使用模拟进行测试
夜神模拟器模拟安卓测试 如果使用正确的方法,模拟对象将非常有用. 我在需要驱动软件开发使用的帖子中分享了一些使用Mock Objects的经验. 在这篇文章中,我分享了两件事 –使用模拟进行基于合同的 ...
- 怎样编写测试类测试分支_编写干净的测试–天堂中的麻烦
怎样编写测试类测试分支 如果我们的代码有明显的错误,我们很有动力对其进行改进. 但是,在某些时候,我们认为我们的代码"足够好"并继续前进. 通常,当我们认为改进现有代码的好处小于所 ...
- 怎样编写测试类测试分支_编写干净的测试-被认为有害的新内容
怎样编写测试类测试分支 很难为干净的代码找到一个好的定义,因为我们每个人都有自己的单词clean的定义. 但是,有一个似乎是通用的定义: 简洁的代码易于阅读. 这可能会让您感到有些惊讶,但我认为该定义 ...
- 打开数据库_打开这份指南,数据库运维也能优雅、简单!
对于常规数据库的运维监控来说,如何能够快速简洁的发现问题,直达问题本质并解决常见问题,是 Bethune 的安身立命之本. 简约,优雅,专业,直抵本心,这是用户对 Bethune 的评价. Bethu ...
- spring 多个数据库_在Spring使用多个数据库
spring 多个数据库 在开发企业应用程序时,我们经常面临访问多个数据库的挑战. 也许我们的应用程序必须将数据归档到某个数据仓库中,或者也许它必须将数据传播到某个第三方数据库. 使用Spring可以 ...
- python读取erp的数据库_【ERP系统设计】【数据库设计】对数据表重命名和读取建表的SQL语句...
今天做了一个小Model,就是把另一数据库中的表复制到目标数据库中,但是复制到目标数据库中的表中的记录为空 思路: 1 读取建表的SQL语句 2 通过jdbc执行 3 对新建表进行重新命名 精要: 1 ...
- java技术全掌握了_你必须掌握的 21 个 Java 核心技术!
写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE ...
- java list有序还是无序_牛批!2w字的Java集合框架面试题精华集(2020最新版),赶紧收藏。...
一个多月前,作者和一些小伙伴决定做一系列的 Java 知识点常见重要问题的小册,方便用来夯实基础!小册的标准就一个,那就是:取精华,取重点.每一本小册,我们都会充分关注我们所总结的知识点是否达到这个标 ...
最新文章
- Web App、Hybrid App与Native App的设计差异
- 延迟环境变量扩展(bat)
- 渐统江湖的项目原型生成工具 -- Maven Archetype
- mysql经常问到的面试题_20道BAT面试官最喜欢问的JVM+MySQL面试题(含答案解析)...
- boost::function和boost:bind取代虚函数
- vue路由传参的三种基本方式 - 流年的樱花逝 - SegmentFault 思否
- 日发帖 发帖频率 发帖时段_先发帖
- Vue的调试工具(Chrome 浏览器)配置
- 国际著名密码学专家来学嘉:区块链对密码学的两大贡献
- ai审计_用于内部审计和风险管理的人工智能
- JavaScript函数实例(一)
- VS 2015专业版密钥
- Pixelization论文与应用简介:像素艺术像素化算法
- 今日新闻快讯摘要十条
- 高并发访问数据库问题
- 国家网络安全周|2022网络安全知识答题
- 如何用html制作快速邮箱发到手机qq,简单两步使用node发送qq邮件的方法
- 芯片分享——MS9601A
- 什么是JavaBeans
- excel切片器_用Excel切片器做自动化表格,动态呈现,瞬间高大上
热门文章
- RocketMQ集群搭建-4.2.0版本
- [PHP] 超全局变量$_FILES上传文件
- 最近项目用到Dubbo框架,临时抱佛脚分享一下共探讨(转)
- Linux下MySQL链接被防火墙阻止
- 影响软件开发的两个关键性的问题
- 细节决定成败:一个公共类库
- jsp实现mysql存储过程_JSP调用MySQL存储过程收藏
- Java应用梯度下降求解线性SVM模型参考代码
- Leetcode 217. 存在重复元素 解题思路及C++实现
- Android中Intent和Intent过滤器详解