支持真实快速TDD的测试工具包(首先测试!)在django应用程序中,极值编程就像!
django-extreme-tdd的Python项目详细描述
#Django极端TDD
[![构建状态](https://drone.io/github.com/flaviamimissi/django extreme tdd/status.png)(https://drone.io/github.com/flaviamimissi/django extreme tdd/latest)
django是一个令人惊叹的网站构建框架,但是它缺乏工具来帮助
软件开发过程中一个非常重要的部分:测试驱动的开发。
django已经支持测试,为什么这个项目?
django有一个要使用的测试用例类列表,并且比以前更好地支持运行测试,
但是,如果您想编写访问数据库的功能测试,并且还想将数据库清理过程留给django,那么默认的testcase类将为您处理所有这些问题。但是
不是没有成本的。
对于编写测试的tdd过程,默认测试用例所增加的成本太高了
。django的testcase用一个事务将套件上的每个测试包装起来,因此每个测试都有一个干净的
运行环境。
每个测试都有一个干净的环境确实是一件好事。如果在
测试之后不清理数据库,结果将是不可预测的,我们应该尽量避免在测试环境中出现这种情况。
django用于清理的事务包装解决方案不够好,因为它**非常慢。
您可以亲眼看到,使用以下步骤重新生成:
-编写一个使用数据库的测试,不要自己清理并继承django.test.testcase
-只运行新测试并记下花费的时间(django给出了在不考虑数据库初始设置的情况下运行测试所需的时间,可以使用此值)
-将testcase类从django更改为unittest.testcase。
-执行所需的所有清理(考虑在此处使用setupclass/teardownclass,如果可以,则使用'em)
-再次运行修改后的测试,并比较使用unittest前后花费的时间。testcase
todo:实际执行上述操作步骤和显示结果(结果必须是可重复的)
可以简单地扩展unittest.test case并添加一个属性,以保留添加到测试用例上的所有对象,然后逐个手动删除,对吗?
是的,这是解决问题的一种方法,但是如果你真的考虑一下,这会比django的测试用例快得多吗?也许吧。如果速度快得多,您可能会发现自己的数据库无论如何都是脏的。这个解决方案不关心在级联中删除对象,它只在您创建的对象与另一个对象具有FK时才起作用,但如果相反,您将无法正确地进行清理。
为什么?
无论我们试图用编程的方式做什么,数据库都可以用它自己的功能做得更好。
这是这个项目中实现的测试用例的想法。
extreme.testcase被设计成在setupclass/teardownclass上执行清理。这意味着从extreme.test case继承
的测试用例将有一个完整的干净数据库供其使用。
但这也意味着我们不包括每个测试的清理。但是,这并不意味着我们不能扩展它。
如果在测试用例的每个测试之前/之后需要清理,扩展ExistMe.TestCase并打开一个拉请求!
只需调用与setupclass/teardownclass/setup/teardown相同的清理方法!呸,问题解决了。
待办事项
[![构建状态](https://drone.io/github.com/flaviamimissi/django extreme tdd/status.png)(https://drone.io/github.com/flaviamimissi/django extreme tdd/latest)
django是一个令人惊叹的网站构建框架,但是它缺乏工具来帮助
软件开发过程中一个非常重要的部分:测试驱动的开发。
django已经支持测试,为什么这个项目?
django有一个要使用的测试用例类列表,并且比以前更好地支持运行测试,
但是,如果您想编写访问数据库的功能测试,并且还想将数据库清理过程留给django,那么默认的testcase类将为您处理所有这些问题。但是
不是没有成本的。
对于编写测试的tdd过程,默认测试用例所增加的成本太高了
。django的testcase用一个事务将套件上的每个测试包装起来,因此每个测试都有一个干净的
运行环境。
每个测试都有一个干净的环境确实是一件好事。如果在
测试之后不清理数据库,结果将是不可预测的,我们应该尽量避免在测试环境中出现这种情况。
django用于清理的事务包装解决方案不够好,因为它**非常慢。
您可以亲眼看到,使用以下步骤重新生成:
-编写一个使用数据库的测试,不要自己清理并继承django.test.testcase
-只运行新测试并记下花费的时间(django给出了在不考虑数据库初始设置的情况下运行测试所需的时间,可以使用此值)
-将testcase类从django更改为unittest.testcase。
-执行所需的所有清理(考虑在此处使用setupclass/teardownclass,如果可以,则使用'em)
-再次运行修改后的测试,并比较使用unittest前后花费的时间。testcase
todo:实际执行上述操作步骤和显示结果(结果必须是可重复的)
可以简单地扩展unittest.test case并添加一个属性,以保留添加到测试用例上的所有对象,然后逐个手动删除,对吗?
是的,这是解决问题的一种方法,但是如果你真的考虑一下,这会比django的测试用例快得多吗?也许吧。如果速度快得多,您可能会发现自己的数据库无论如何都是脏的。这个解决方案不关心在级联中删除对象,它只在您创建的对象与另一个对象具有FK时才起作用,但如果相反,您将无法正确地进行清理。
为什么?
无论我们试图用编程的方式做什么,数据库都可以用它自己的功能做得更好。
这是这个项目中实现的测试用例的想法。
extreme.testcase被设计成在setupclass/teardownclass上执行清理。这意味着从extreme.test case继承
的测试用例将有一个完整的干净数据库供其使用。
但这也意味着我们不包括每个测试的清理。但是,这并不意味着我们不能扩展它。
如果在测试用例的每个测试之前/之后需要清理,扩展ExistMe.TestCase并打开一个拉请求!
只需调用与setupclass/teardownclass/setup/teardown相同的清理方法!呸,问题解决了。
待办事项