django的测试方法(五)

本文详细介绍了在Django中如何进行测试,包括如何创建测试揭露bug,运行并修复测试,以及更全面地测试`was_published_recently()`方法。还探讨了测试一个视图的重要性,并介绍了Django的测试客户端,用于模拟用户与视图的交互。通过这些测试,确保了代码的正确性和未来的稳定性。
摘要由CSDN通过智能技术生成

 

通过使用shell检查该方法,以验证该方法的日期是否在未来:

python manage.py shell

由于未来的事情不是“最近”,这显然是错误的。

创建一个测试来公开这个bug

我们在shell中所做的就是测试这个问题,这正是我们在自动化测试中所能做的,所以让我们把它变成一个自动化测试。

应用程序测试的常规位置是应用程序的test.py文件;测试系统将自动在任何名称以test开头的文件中找到测试

 

运行测试

 

python manage.py  test   polls

What happened is this:

 1. manage.py test polls looked for tests in the polls application

2.  it found a subclass of the django.test.TestCase class

3.  它为测试的目的创建了一个特殊的数据库

4.  它寻找测试方法——那些名字以 "test" 开始的方法

5.  in test_was_published_recently_with_future_question it created a Question instance whose pub_date field is 30 days in the future

6.  … and using the assertIs() method, it discovered that its was_published_recently() returns True, though we wanted it to return False

测试告诉我们哪些测试失败了,甚至是失败发生的那条线。

 

Fixing the bug

We already know what the problem is: Question.was_published_recently() should return False if its pub_date is in the future. Amend the method in models.py, so that it will only return True if the date is also in the past:

and run the test again

 


更全面的测试

While we’re here, we can further pin down the was_published_recently() method;事实上,如果修复一个我们引入的错误,那将是非常令人尴尬的。

在同一类中添加两个测试方法,以更全面地测试该方法的行为:

现在我们有三个测试来确认这个问题。最近发布的()为过去的、最近的和未来的问题返回了合理的值。

同样,polls 是一个简单的应用程序,但是无论它在将来会变得多么复杂,无论它与什么其他代码交互,我们现在都有一些保证,我们编写的测试方法将以预期的方式运行。

 

 


测试一个视图

polls 是相当没有区别的:它会发布任何问题,包括那些其pub_date字段存在于未来的问题。我们应该改善这种。在未来设置一个pub_date应该意味着这个问题在那个时候发布,但是在那之前是不可见的。

对视图的测试

当我们修复上面的错误时,我们先编写测试,然后再编写代码来修复它。事实上,这是测试驱动开发的一个简单的例子,但是我们做这项工作的顺序并不重要。

在我们的第一个测试中,我们密切关注代码的内部行为。对于这个测试,我们想要检查它的行为,因为它将由用户通过web浏览器体验

在我们试图解决任何问题之前,让我们先来看看我们可以使用的工具。

Django测试客户端

Django 提供了一个测试客户端来模拟用户在视图级别与代码交互. We can use it in tests.py or even in the shell.

我们将再次从shell开始,在这里我们需要做一些在tests.py中不需要的事情。第一个是在shell中设置测试环境:

python manage.py shell

setup_test_environment()安装一个模板渲染器,它将允许我们检查响应等响应的一些附加属性。否则将无法获得的上下文。 注意,这个方法没有设置一个测试数据库,因此下面将针对现有的数据库运行,并且输出可能会根据您已经创建的问题略有不同。. 如果你的TIME_ZONE 在settings.py中并不是正确的,你可能会得到意想不到的结果。如果你不记得更早地设置它,在继续之前检查它。

接下来,我们需要导入测试客户端类(稍后在测试中。我们将使用django.test。TestCase类,它有自己的客户端,所以这是不需要的):

With that ready, we can ask the client to do some work for us:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值