单元测试:在您的数据库项目中应用测试驱动的开发

本文讨论:

TDD 的优点

在数据库开发中应用单元测试

组合 T-SQL 与 .NET 兼容的语言

连接、测试条件和事务

本文使用了以下技术:

Visual Studio 2008, SQL Server

LMicrosoft 于 2006 年 11 月发布了 Visual Studio Team System Database Edition,也称为 DBPro 或 Data Dude,它向产品生命周期方法中引入了数据库开发。DBPro 还引进了数据库单元测试设计 器,使用它可以轻松地生成或编写面向 T-SQL 的单元,在开发前验证数据库对象。在本文中,我将深入 阐述数据库单元测试,解释运用功能的方法,展示如何对您自己的数据库项目执行单元测试。

软件开发中的单元测试

在软件开发中,单元测试在确保质量水平和满足里程碑要求方面发挥着重要的作用。尽管很多开发人 员均认可单元测试的重要性,但他们大都不会在产品周期结束时花费时间编写单元测试。为解决这一问题 ,测试驱动开发 (TDD) 方法应运而生。开发人员可以使用这种方法在实际运用功能前编写单个功能的单 元测试。这样,开发人员就可以从外到内查看 API,尽可能简化设计。

如今,众多使用 C# 和 Visual Basic 的开发人员均以 TDD 为指导,通过创建单元测试在尚未 编写的类上试用方法,然后利用最少量的代码编译测试。如果编译后的测试失败,开发人员只需编写通过 下一轮测试所必需的代码即可。每次迭代时均运行所有单元测试来验证没有出现回归错误。应用程序和单 元测试代码随后签入源代码控件。每个单元测试针对所开发的方法运行两次。

为充分发挥作用,单元测试在其运行前必须设置自身的执行环境,以便稳定地验证其专门测试的代码 。实施并验证测试后,将其签入源代码控件并在产品生命周期的其余部分使用,以确保按预期继续使用方 法。

由于您需要提供稳定的测试环境以便在签入更改前验证代码,TDD 也因此在数据库开发中变得更具挑 战性。为了让数据库单元测试成功运行,它必须具备合适的架构和数据。这意味着为运行测试,其他开发 人员在创建单元测试时必须重用您所使用的环境。如果没有大量造价高昂的基础结构,这一点很难实现。 幸运的是,DBPro 能让身处这一环境的开发人员遵循相同的单元测试流程。

从源代码控件中获得最新的测试和数据库项目,然后将新存储的过程加入数据库项目中。配置过程的 输入和输出参数。

右键单击新存储的项目,然后选择“create unit tests”(创建单元测试)。将单元测试 添加到现有的测试项目中。新测试类加入带有 T-SQL 的测试项目,T-SQL 将使用默认输入参数执行新存 储的过程。

修改输入参数以包含预期值,然后添加测试条件以验证存储的过程是否返回了预期的结果。

运行测试。进行测试设置时,将数据库项目部署到本地的 SQL Server 实例中,并执行数据生成 计划以用预期的测试数据填充新部署的数据库。针对本地 SQL Server 实例执行测试,测试会失败(这是 预期的结果,因为存储过程的逻辑尚未执行)。

执行存储过程的逻辑并再次运行测试。部署更新后的存储过程并通过测试。

运行所有测试来验证数据库,然后将存储的过程和单元测试代码签入源代码控件中。

DBPro 提供的功能包括:从现有的函数、存储的过程或触发器生成存根 T-SQL 单元测试;自动将数据 库项目更新部署到沙箱实例中;使用数据生成计划在测试环境设置过程中生成数据;以及针对目标数据库 执行 T-SQL 测试。尽管这些功能可一起使用,但并不要求必须这样做。例如,可以从头编写数据库单元 测试,不必在每个测试运行前都生成数据。

时间: 2024-09-13 12:12:00

单元测试:在您的数据库项目中应用测试驱动的开发的相关文章

这个工具可以清除软件代码项目中的硬编码密钥

本文讲的是这个工具可以清除软件代码项目中的硬编码密钥,Truffle Hog可以在源代码存储库内找到20个字符或以上的访问令牌和密钥 安全研究人员开发了一种新工具,这一工具可以自动检测软件项目中已被硬编码的敏感访问密钥. 这种名为Truffle Hog( https://github.com/dxa4481/truffleHog )的工具由美国研究员迪伦·艾雷用Python语言开发.它可以通过扫描源代码库里包含20以上字符的高熵值的字符串来搜寻硬编码的访问密钥.高香农熵,即我们通常所说的信息熵,

03_Android项目中读写文本文件的代码

编写一下Android界面的项目 使用默认的Android清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.itheima28.writedata"     android:versionCode=&q

对ASP.NET MVC项目中的视图做单元测试

关于视图的单元测试 说到ASP.NET MVC,我们似乎始终都在关注对于Controller的测试--虽然Stephen Walther也写过如 何脱离Web Server对View进行单元测试,但是他的方法可看而不可用.复杂的构造和预备,以及对生成的 HTML字符串作判断--这真是在对视图做单元测试吗?仔细分析他的代码可以发现,这其实是在对 ViewEngine做单元测试.而且,如果真要对ViewEngine做单元测试,也不应该像他那样依赖外部文件.在 我看来,他的做法什么都不是--似乎美观,

java项目使用百度地图-javaweb项目中关于百度地图从数据库中取出经纬度在百度地图上进行标注

问题描述 javaweb项目中关于百度地图从数据库中取出经纬度在百度地图上进行标注 从数据库可以获取经纬度 我想把这个经纬度加载到车的图标上 在页面的span中可以显示 因为body中是写个一个init的方法 此时要把经纬度也加在进去?请问有谁帮我解决 在线等!

php项目中,ueditor上传图片后图片路径如何获取并保持到数据库中?

问题描述 php项目中,ueditor上传图片后图片路径如何获取并保持到数据库中? php项目中,ueditor上传图片后图片路径如何获取并保持到数据库中? 解决方案 你是上传了之后不用还是会选择到编辑器中,如果选择到编辑器中,那就直接加编辑器改变事件,再用正规则把图片自己匹配出来就可以了

android直接读取项目中的sqlite数据库

最近项目中要实现android读取sqlite数据库文件,在这里先做一个英汉字典的例子.主要是输入英语到数据库中查询相应的汉语意思,将其答案输出.数据库采用sqlite3. 实现过程完全是按照参考文章中所述.其中要说明的是,程序在第一次启动的时候,会把数据库安装到内存卡上面,从而可以读却数据库.   package com.easymorse; import java.io.File; import java.io.FileOutputStream; import java.io.InputSt

数据库丢失 项目中还存在dbml 转sql 求教!!!!!

问题描述 数据库丢失 项目中还存在dbml 转sql 求教!!!!! 请教高手,数据库丢失,项目中还存在dbml 转sql 求教!!!!! 包含外键关系! 解决方案 这不简单,有DBML, 项目能编译通过的话: C# code ? 1 2 if (!db.DatabaseExists()) db.CreateDatabase(); https://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.createdatabas

新建MVC 项目 ,怎么把现有的100多个 表的数据库,生成到项目中

问题描述 新建MVC4项目,怎么把现有的100多个表的数据库,生成到项目中求大神指点,刚接触MVC求教育 解决方案 解决方案二:这是什么需求?有必要将100个表生成到mvc么?解决方案三:有啊,只需要生成部分的表就行:解决方案四:你查下EF的资料吧--解决方案五:引用1楼sunylf的回复: 这是什么需求?有必要将100个表生成到mvc么? 表有很多,只需要生成部分的表就行:我刚生成的了但我新建控制器的时候老报错呢:上下文类型不受支持解决方案六:有的表没有主键什么的ef不给你生成的还有其他情况:

代码-java单元测试时jar读取项目中properties

问题描述 java单元测试时jar读取项目中properties 我的项目中引用同事的jar,这个jar中读取了我项目中的properties,我的properties里的value是从pom中获取的,这时问题出现了 jar只能读取properties中pom还没有注入时的value,也就是${value}形式.但我项目中自身的获取properties的代码可以成功获取pom注入后的value.这是什么问题?两个现象的区别就是一个是从jar中获取,一个是本地程序获取. 解决方案 肯定是jar中读