技术开发 频道

使用Visual Studio进行测试驱动开发

  现在,我们需要选择一个之前建立的数据库连接用于执行单元测试,因此我们从下拉框中选择OnlineStore连接。由于我们将会在编写测试数据库项目中开发我们的存储过程,所以我们也要在测试运行之前建立配置信息,用于自动部署我们对数据库项目的改动。这会导致测试在运行前有所延迟,但是这避免了因为没有重新部署数据库的改动而使测试莫名其妙的通过或失败。现在您的屏幕应该是这样的:

  请注意,我们也可以在单元测试运行之前生成测试数据。这个功能之强大已经超出了文章所描述的范围,但是我建议您可以对其进行深入研究。配置完成之后请点击OK按钮。现在您会发现Visual Studio中出现了三个编写单元测试的重要窗口。第一个是当前测试区域:

  这个区域中有几个下拉列表,用于显示我们当前正在关注的测试(可能我们正在检查这个测试,或测试前后所要执行的脚本),以及一些用于添加、删除和重命名测试的按钮。

  第二个区域是我们编写测试的主要窗口。它显示了如下消息:

  正如我们将会看到的那样,测试将会使用T-SQL来编写。下一个区域是Test Condition部分:

  这是在测试脚本执行之后我们所指定的一些操作,就好像在xUnit测试框架中的Asserts语句一样。

  我们在开始之前还需要做一步整理工作。当我们创建了OrderDiscountTests类之后,它将会为我们创建一个默认的测试。点击Rename按钮,并将其命名为ZeroDollarOrderShouldHaveZeroDiscount。现在,点击“Click here to create”按钮,删除注释,并输入以下代码:

  exec sp_calculate_discount_for_order 0.00

  我们希望测试调用我们的存储过程,并使用$0.00作为订单价格。基于我们在文章开始时所提到的对应表,返回的折扣数量应该是0.00。因此,我们需要添加一个Test Condition来比较我们的期望值和返回值。在我们的Test Condition部分中,删除Inconclusive Result(点击红X),然后在下拉列表中选择Scalar Value并点击添加按钮。

  这允许我们把期望值和结果集中特定行和列的值进行比较。右键单击这一行并选择Properties,并在属性面板中进行修改,这里我们希望第1行第1列的值为0.00。

  现在,选择Test菜单中的Run(在2005中选择run without the debugger)运行我们的单元测试。您会发现运行测试需要一段时间,这是因为它正在比较我们的数据库项目和目标数据库,来确定是否需要进行部署或者进行其他一些需要在第一次运行时处理的配置。您应该看到测试失败的提示,因为数据库中缺少sp_calculate_discount_for_order存储过程,那么让我们来解决这个问题。右键单击数据库项目并选择Add -> Stored Procedure:

  将其命名为sp_calculate_discount_for_order并点击OK按钮。请注意这是个存储过程的SQL语句定义,将其修改为:

  CREATE PROCEDURE [dbo].[sp_calculate_discount_for_order]
       @orderAmount money
       AS
      SELECT 0.00RETURN 0;

  在窗口外我们能够得到分析ResultSet的支持。现在我们的存储过程及将会返回我们期望的折扣数值。每次您改变存储过程之后,都需要保存文件。这时候我们数据库项目中已有了存储过程定义,但是数据库中还没有。您打开目标数据库就会发现现在还没有任何存储过程。我们再回到测试中:

  测试通过了!您可能运行测试前又出现了一次停顿,这是因为数据库项目中的改变正部署到测试用的目标数据库。

0
相关文章