models.py里的数据库定义如下:

from django.db import models

# Create your models here.

class Teachers(models.Model):

    name = models.CharField(max_length=32)

class Classes(models.Model):

    title = models.CharField(max_length=32)
    a = models.ManyToManyField(Teachers)

class Students(models.Model):
    username = models.CharField(max_length=32)
    age = models.IntegerField()
    gender = models.BooleanField()
    cs = models.ForeignKey(Classes, on_delete=models.CASCADE)

tests.py里的内容如下,注意红色部分,是比较麻烦一点的,要构建好相关的orm语句及使用assertIn之类的来测试。

from django.test import TestCase
from .models import Students, Teachers, Classes

# Create your tests here.

class ModelTest(TestCase):

    def setUp(self):
        t1 = Teachers.objects.create(name="Mrs. Chane")
        t2 = Teachers.objects.create(name="Mss. Fang")
        Teachers.objects.create(name="ABC")
        c1 = Classes(title="123")
        c1.save()
        c1.a.add(t1)
        c1.a.add(t2)
        c1.save()
        Students.objects.create(username="bb",
                                age=23,
                                gender=True,
                                cs=c1)

    def test_teacher_models(self):
        result = Teachers.objects.get(name="Mrs. Chane")
        self.assertEqual(result.name, "Mrs. Chane")

    def test_class_models(self):
        t1 = Teachers.objects.get(name="Mrs. Chane")
        t2 = Teachers.objects.get(name="Mss. Fang")
        t3 = Teachers.objects.get(name="ABC")
        result = Classes.objects.get(title=")
        self.assertEqual(result.title, "123")
        self.assertIn(t1, result.a.all())
        self.assertIn(t2, result.a.all())
        self.assertNotIn(t3, result.a.all())

    def test_student_models(self):
        result = Students.objects.get(username="bb")
        self.assertEqual(result.age, 23)
        c1 = Classes.objects.get(title=")
        self.assertEqual(result.cs, c1)
        self.assertEqual(result.gender, True)

Django为数据库的ORM写测试例(TestCase)的更多相关文章

  1. django 多数据库时 ORM语句 选择数据库

    多数据库时ORM语句选择数据库 不需要save的操作: 查询(删除的话查询语句后面加一个.delete()即可,修改的话在后面加一个.update()即可): models.表名.objects.us ...

  2. Django/MySql数据库基本操作&ORM操作

    数据库配置: #第一步在settings里面 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbna ...

  3. django中注册功能signup的测试例

    这个是套路, 有了这些测试用例, 开发就会更有保障, 且每次重写,都好麻烦, 不好cp来得快~~:) from django.test import TestCase from django.urls ...

  4. 自己动手写一个简易对象关系映射,ORM(单例版和数据库池版)

    准备知识 DBUtils模块  <<-----重点 DBUtils是Python的一个用于实现数据库连接池的模块 此连接池有两种连接模式: DBUtils提供两种外部接口: Persist ...

  5. Django基础--Django基本命令、路由配置系统(URLconf)、编写视图、Template、数据库与ORM

    web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构. 使用框架可以帮你快速开发特定的系统. 简单地说,就是你用别人搭建好的舞台来做表演. 尝试搭建一个简单 ...

  6. django 操作数据库--orm(object relation mapping)---models

    思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...

  7. Django之 数据库ORM

    一.ORM Django的 业务 少不了 跟数据库打交道,不然没有数据库保存一些数据将是一件很糟糕的事情.Django 对 数据库 支持原生的 SQL语句,但更好的对数据库支持,Django自己有一套 ...

  8. Django学习之数据库与ORM

    二.ORM表模型 表(模型)的创建: 1.ORM之增(create.save) 一对多(ForeignKey): 多对多(ManyToManyField()): 2.ORM之删(delete) 3.O ...

  9. [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]

    [Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...

随机推荐

  1. Luogu4980 【模板】Polya定理(Polya定理+欧拉函数)

    对于置换0→i,1→i+1……,其中包含0的循环的元素个数显然是n/gcd(i,n),由对称性,循环节个数即为gcd(i,n). 那么要求的即为Σngcd(i,n)/n(i=0~n-1,也即1~n). ...

  2. (转)CS0016: 未能写入输出文件

    转自:http://www.pageadmin.net/article/20130305/537.html 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息 ...

  3. MT【177】三个乘积和

    对任意 2 个 1,2,3,4,5,6 的全排列 $(a_1,a_2,a_3,a_4,a_5,a_6)$ 和 $(b_1,b_2,b_3,b_4,b_5,b_6)$,求$\displaystyle S ...

  4. MT【173】齐次消元单变量

    已知$x\ge0,x^2+(y-2)^2=1,W=\dfrac{3x^2+2\sqrt{3}xy+5y^2}{x^2+y^2}$,求$W$的最值. 提示:$x\ne0$时,设$t=\dfrac{y}{ ...

  5. bzoj3884上帝与集合的正确用法

    Description   根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“ ...

  6. luogu1373 小a和uim之大逃离 (dp)

    直接设f[i][j][k][l][2]是在(i,j)时两人分数是k,l,复杂度会爆掉 但其实只需要知道两人分数只差就行了 所以设f[i][j][k][2],k是分数之差%(K+1),最后一位表示该谁走 ...

  7. Objective-C 中的协议(@protocol)和接口(@interface)的区别

    Objective-C 中的协议(@protocol),依照我的理解,就是C#, Java, Pascal等语言中的接口(Interface).协议本身不实现任何方法,只是声明方法,使用协议的类必须实 ...

  8. 图像处理之生成ColorBar

    1 colorBar介绍 colorBar主要是指一些图像处理中使用的常见纯色或者渐变色条.colorBar用途可作为测试样图来验证某些图像算法的效果,从而避免图像内容或者硬件对图像的干扰,使图像算法 ...

  9. IAR ------ 基本使用

    1.编译结果: 6 887 bytes of readonly code memory 621 bytes of readonly data memory 331 bytes of readwrite ...

  10. CSS规范 - 代码格式--(来自网易)

    选择器.属性和值都使用小写 在xhtml标准中规定了所有标签.属性和值都小写,CSS也是如此.单行写完一个选择器定义 便于选择器的寻找和阅读,也便于插入新选择器和编辑,便于模块等的识别.去除多余空格, ...