51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 16766|回复: 36
打印 上一主题 下一主题

[转贴]数据库的单元测试。

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2004-9-14 19:27:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
这些笔录是我关于已完成的数据库功能测试的一些心得。其中的例子是用java语言编写的,但我认为这些想法对于大多数编程环境都普遍适用。当然,我仍致力于寻找更佳的解决方案。
  现实的问题是这样的:你有一个SQL数据库,一些存储过程和一个介于应用程序和数据库之间的中间层。你怎样在其中插入测试代码从而保证在数据库中数据存取功能的实现?
一、 为什么会有这样的问题?
  我猜想有些,可能不完全是大多数的数据库开发过程都是这样的:建立数据库,编写存取数据到数据库的代码,编译并运行,用一个查询语句查验所列的数据是否正确显示。如果能正确显示那就大功告成了。 然而,这种靠眼睛来检测的弊端在于:你不经常进行这样的检验,而且这种检验是不完全的。存在这样的可能性,当你对系统进行了修改,过了几个月后,你无意中破坏了系统,从而导致数据的丢失。作为一个编程人员,你可能不会花很多时间来检查数据本身,这就使错误的数据要经过较长的时间才能暴露出来。我曾经参与一个建立网站的项目,该项目中在注册时有一个必填数据在大半年中没有被发现未实际输入进数据库。尽管公司市场部曾经提出他们需要这一信息,但因为这项数据从来没有人去看它,直接导致了这一问题在很长时间内没有被发现。 自动化测试,由于它能经常测试而且测试范围较广,降低了数据丢失的风险。我发现它能使我更心安理得地休息。当然,自动化测试还有其他一些好处,他们本身就是代码编写的范例,也可以作为文档,便于你修改别人编写的原始程序,从而减少检测所需的时间。
二、 什么是我们所谈论的测试?
  设想有一个非常简单的用户数据库,包括用户电子信箱和一个标志,用来指示邮件地址是否被弹回。你的数据库程序应该包括插入、修改、删除和查询等方法
  插入方法会调用一个存储过程将数据写入数据库。为了叙述方便,这里省去了一些细节,大致的程序如下所示:
public class UserDatabase
{
...
public void insert(User user)
{
PreparedStatement ps = connection.prepareCall("{ call User_insert(?,?) }");
ps.setString(1, user.getEmail());
ps.setString(2, user.isBad()); // In real life, this would be a boolean.
ps.executeUpdate();
ps.close();
}
...
}
  而我认为的测试代码应为:
public class TestUserDatabase extends TestCase
{
...
public void testInsert()
{
// Insert a test user:
User user = new User("some@email.address");
UserDatabase database = new UserDatabase();
database.insert(user);
// Make sure the data really got there:
User db_user = database.find("some@email.address");
assertTrue("Expected non-null result", db_user != null);
assertEquals("Wrong email", "some@email.address", db_user.getEmail());
assertEquals("Wrong bad flag", false, db_user.isBad());
}
...
}
  可能你还有更多测试代码。(注意一些测试,例如对date类的测试)。
  assertTrue和assertEquals方法进行条件测试。如果测试失败,他们将返回诊断消息。其重点是这些测试都基于一个测试框架自动执行,并给出测试成败的标志。这些测试都基于用java语言编写的测试框架Junit类(程序附后)。这一框架也能适应其他诸如C, C++, Perl, Python, .NET (all languages), PL/SQL, Eiffel, Delphi, VB等语言环境。
  下一个问题就是:我们有测试,但我们怎样保证测试数据和实际数据能严格区分?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏

该用户从未签到

37#
发表于 2008-10-20 14:16:58 | 只看该作者
学习中 谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

36#
发表于 2008-10-9 16:24:57 | 只看该作者
支持之中
回复 支持 反对

使用道具 举报

该用户从未签到

35#
发表于 2008-8-15 09:49:25 | 只看该作者
看了个一知半解,希望能进一步解释。
回复 支持 反对

使用道具 举报

该用户从未签到

34#
发表于 2008-8-12 16:13:08 | 只看该作者
感觉
回复 支持 反对

使用道具 举报

该用户从未签到

33#
发表于 2008-8-12 11:24:07 | 只看该作者
看不懂,所以也无法评价好坏
回复 支持 反对

使用道具 举报

该用户从未签到

32#
发表于 2008-5-23 10:09:36 | 只看该作者
学习了
回复 支持 反对

使用道具 举报

该用户从未签到

31#
发表于 2007-11-14 14:54:20 | 只看该作者
看了一半感觉看不太明白,因为没有学过该开发语言,不过觉得写的不错,如果知道该开发语言会更清楚些,thank you!
回复 支持 反对

使用道具 举报

该用户从未签到

30#
发表于 2007-9-18 23:45:21 | 只看该作者
好贴子!sdlkfj5
回复 支持 反对

使用道具 举报

该用户从未签到

29#
发表于 2007-9-16 13:48:01 | 只看该作者
学习,谢谢!!
回复 支持 反对

使用道具 举报

该用户从未签到

28#
发表于 2007-9-1 22:27:29 | 只看该作者

回复 #2 大唐盛世 的帖子

今天 刚上了 这方面的课    看看  收获 更 好
回复 支持 反对

使用道具 举报

该用户从未签到

27#
发表于 2007-8-31 17:03:19 | 只看该作者
测试存储过程时,有没有自动化的
回复 支持 反对

使用道具 举报

该用户从未签到

26#
发表于 2007-8-31 17:01:20 | 只看该作者
不太明白
回复 支持 反对

使用道具 举报

该用户从未签到

25#
发表于 2007-8-3 13:27:09 | 只看该作者
还没仔细看,先顶一下
回复 支持 反对

使用道具 举报

该用户从未签到

24#
发表于 2007-7-31 22:07:20 | 只看该作者
真是好,都是我想问的
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2015-12-2 10:12
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]测试排长

    23#
    发表于 2007-7-12 18:32:17 | 只看该作者
    看得我一头雾水!!学习中~~·回家在慢慢研究!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22#
    发表于 2007-7-2 00:47:25 | 只看该作者
    I want to known how to test database and application 's communication.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    21#
    发表于 2007-6-15 13:27:27 | 只看该作者
    简单看了一下,这篇文章可能不太适合入门者看吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2007-6-12 16:55:27 | 只看该作者
    挺有建设性,支持中。。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2007-5-29 13:23:06 | 只看该作者
    我觉得对于涉及到数据库数据的单元测试,难点就在于样本数据的固化。也就是说,挑选出来的样本数据,在每个单元测试函数里保证它们都处于一致的、预期的状态。这样,在编写测试函数时,数据环境将是已知,确定的。这样,我们能够很方便的编写Dao层的单元测试代码。同样,也可以很方便的编写Biz层的单元测试代码。
    而如果样本数据无法固化,对于Biz层的单元测试代码,很难编写,特别是如果它的业务逻辑涉及到一些数据时。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-13 07:50 , Processed in 0.089996 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表