Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

利用 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 ,这到底是什么原因?



  • 搞清楚原因了:
    员工 唯一性 验证代码中,获取count 变量处 是有问题的。

    count = self.env[' archives.common_archive'].search_count(
    [('name', '=', self.name), ('id', '!=', self.id)])
    这一行有问题, env 后面跟的 环境 是错误的, 换成 self._name 就好了, 略显尴尬。。


Log in to reply