2011-08-19 92 views
6

我目前正在尝试使用PHPUnit来了解测试驱动开发(TDD),并且有关于使用TDD编写报告的问题。使用TDD创建报告

第一关:我明白TDD的基本过程:

TDD Flowchart

但我的问题是:你如何使用TDD写报告?假设你的任务是编写一份报告,说明按照颜色,类型和体重通过给定十字路口的汽车数量。现在,所有上述数据都已被捕获到数据库表中,但您被要求关联它。

你如何去写一个你不知道结果的方法的测试?根据用户在运行报告时可能提供的日期范围和其他限制条件,关联此数据的方法的结果将会发生变化?在这种情况下,您如何使用像PHPUnit这样的框架在TDD的范围内工作?

回答

6

您可以预先创建测试数据,它代表您将在生产中收到的数据类型,然后测试代码,每次运行测试(即在SetUp()函数中)刷新表格。

无论您测试的是什么,您都无法根据您在生产中收到的实际数据进行测试。您只是测试代码按照给定方案的预期工作。例如,如果您将测试表加载五排蓝色汽车,那么您希望报告在测试时显示五辆蓝色汽车。您正在测试报告的各个部分,以便完成后您将自动测试整个报告。

作为比较,如果您正在测试的函数需要1到100之间的正整数,您会编写100个测试来测试每个单独的整数吗?不,你会在范围内测试某些东西,然后测试边界上和周围的东西(例如-1,0,1,50,99,100和101)。例如,您不测试55,因为该测试将沿着与50相同的代码路径进行测试。

确定您的代码路径和要求,然后为其中的每一个创建合适的测试。您的测试将成为您的要求的反映。如果测试通过,那么代码将准确地表达您的需求(如果您的需求错误,TDD无法为您节省)。

2

运行测试套件和运行脚本时,不要使用相同的数据。您使用测试数据。所以如果你想与数据库交互,一个好的解决方案是创建一个sqlite database stored in your ram

同样,如果你的函数与文件系统交互,你可以使用a virtual filesystem

而且如果你必须与对象交互,you can mock them too

好的是你可以测试你在编写代码时所考虑的所有恶性边缘情况数据(嘿,如果数据包含未转义的引号?)。

2

直接对您的生产服务器进行测试非常困难,而且通常是不明智的,所以最好的办法就是假冒它。

首先,创建一个stub,这是一个特殊的对象,它代表数据库允许您进行单元测试,假设某个值来自数据库,当它真的来自您时。如果需要,你有一些能够产生一些你不知道的东西,但仍然可以通过测试。

一旦一切都在那里工作,你可以在数据库本身的数据集在一些测试模式 - 基本上,你,但使用不同的参数连接,以便当它认为它正在寻找PRODUCTION.CAR_TABLE它真正关注的TESTING.CAR_TABLE 。你甚至可能希望每次都进行测试删除/创建表(尽管这可能会有点多,但它会产生更可靠的测试)。