利用 odoo 自带类 odoo.test.common.TransactionCase 进行单元测试,发现 对 唯一性验证 @api.constrain 中的代码不执行,除了直接添加 数据库 约束的方法,有没有办法 执行 @api.constrain 中代码的方法?
-
- 测试 员工 唯一性 代码:
def test_staff_name_unique(self): """ 2、测试“名称“的唯一性。 创建{名称}=销售员1 ,{用户}=空,{销售员}=勾选,{采购员}=非勾选,{发货人}=非勾选。 报{名称}不能重复错误 :return: """ same_name = '销售员1' vals_list = [ {'name': same_name, 'is_sale_man': True}, {'name': same_name, 'is_sale_man': True}, ] self.env['archives.staff'].create(vals_list[0]) try: record = self.env['archives.staff'].create(vals_list[1]) if record: print 'Failed! \n 创建第二个 名为 “%s” 的员工 成功 \n [员工]档案{名称} 唯一性 测试有误。' % same_name except Exception as e: print '创建第二个 名为 “%s” 的员工 失败\n error_info:%s \n [员工]档案{名称} 唯一性 测试无误。' \ % (e.message, same_name)
- 员工 唯一性 验证代码:
@api.constrains('name') def _check_name(self): count = self.env['archives.common_archive'].search_count( [('name', '=', self.name), ('id', '!=', self.id)]) if not count: return raise ValidationError('名称已存在')
- 测试 console 内容:
Testing started at 上午11:03 ...
/home/francie/miniOdoo/venv/bin/python /home/francie/pycharm-2019.2/helpers/pycharm/_jb_unittest_runner.py --target test_staff.StaffTestCase.test_staff_name_unique
Launching unittests with arguments python -m unittest test_staff.StaffTestCase.test_staff_name_unique in /home/francie/miniOdoo/addons_mine/archives/tests/archives
Ran 1 test in 0.962s
OK
Process finished with exit code 0
No handlers could be found for logger "odoo.fields"
Failed!
创建第二个 名为 “销售员1” 的员工 成功
[员工]档案{名称} 唯一性 测试有误。 -
debug的时候,是进入了 _check_name 方法的, 但是 变量 count 第二次创建的时候,其值 仍旧为 0 ,这到底是什么原因?