Skip to main content
 首页 » 编程设计

python之Django:如何测试非空字段

2025年05月04日22yxwkf

当我的模型中未设置非空字段时,我试图使单元测试失败:

class Foo(models.Model): 
    email = models.EmailField( 
        unique=True, 
        null=False, 
        blank=False) 
 
def testFoo(self): 
    try: 
        Foo.objects.create().save() 
    except: 
        self.fail("error!") 

但它永远不会失败。

电子邮件格式和非空验证在应用程序运行时工作得很好,但我无法编写测试。

当然,我可以通过编程方式进行验证,但我不想重复自己。有什么想法吗?

请您参考如下方法:

好吧,你有几个问题,我来列举一下:

  1. save 是多余的。 create 已经进行了保存。
  2. 创建对象不会触发诸如“这封电子邮件是否有效”之类的验证。如果您尝试将 email=None 传递给该字段,它将失败,因为您将 null=False 参数传递给该字段,但电子邮件的默认值为 '',所以它在那个级别没有失败。如果您想验证电子邮件是否有效,请执行以下操作:

    def testFoo(self): 
        try: 
            a = Foo.objects.create() 
            a.clean_fields() 
        except: 
            self.fail("error!")