编写测试的目的与范围:
首先,测试是为了验证代码的准确性。而前端代码是运行在浏览器上的代码,已经可以展示出来的,所以就不用写测试了。
那么我们需要测试的就只有后端代码,其中包括models,views和urls。
那么接下来就开始进行编写测试,首先创建测试文件,在以下目录下创建,没有文件夹就自行创建文件夹。
我是编写了两个文件,分别测试models和views,测试views不可避免要测试urls,所以urls的测试就省略了。
官方文档还有test_forms.py,由于Django几乎自学,所以我也不大了解forms具体是做什么的,暂不考虑。
然后编写测试类,测试类需要继承TestCase基类。
该基类下有两个三个函数,分别介绍。
第一,@classmethod
def setUpTestData(cls):
该函数中在启动运行时中调用一次,且只会调用一次,可以在这里写数据库数据。另外说一句,Django的unit test用的数据库和Django server用的数据库是独立分开的,单元测试的数据库用完会自动销毁,如若不想销毁,自行百度。
第二,def setUp(self) -> None:
该函数在每个测试函数开头调用一次,可以在这里编写每个测试函数都需要做的东西。
第三,def tearDown(self) -> None:
该函数在每个测试函数结束运行后调用一次,可以在这里编写每个测试函数都需要做的东西。
然后就是正常的测试函数的编写,先说views的测试,举以下的例子。
self.client是Django单元测试自带的客户机,可以使用get(url)方法去获取Httpresponse。
不过url每次都得写全部格式,可以用reverse反转,通过字符串寻找url。如下。
当然,有get就有post,都是一样的方法。如果想传递参数,则再添加一个参数data,写法如下:
data参数的内容一般都是字典格式,这里一般都传表单中需要的值。
response.status_code是Http状态码,200代表无异常,3xx代表拒绝,404访问不到,500服务器错误。我记得就这么多。
如果要测试Response中从后端传到前端的参数,则使用以下语句
response.context存储的是后端传到前端的参数,以字典的形式。就这样查。
models的测试就不说了,就是测试一下字段名是否一致,然后创建一行数据进去,看看取出来是否一致,直接看着官方代码就能编。
最后,测试是可以debug的,按以下信息编辑配置
然后就能设置断点了。