Monkey 补丁 post 安装测试

Monkey patch post install test

我的 post-install 测试有问题,我想像这样使用 Monkey Patch。

import addons.product.tests.test_product_attribute_value_config
from addons.product.tests.test_product_attribute_value_config import TestProductAttributeValueSetup
from odoo.tests import tagged

print(TestProductAttributeValueSetup)
print(addons.product.tests.test_product_attribute_value_config.TestProductAttributeValueConfig.test_clear_caches)
print("START")
@tagged('post_install', '-at_install')
class TestProductAttributeValueConfig(TestProductAttributeValueSetup):
    print("IN Class")
    def test_clear_caches(self):
        print("IN method")
        return

print("OUT")
addons.product.tests.test_product_attribute_value_config.TestProductAttributeValueConfig.test_clear_caches\
    = TestProductAttributeValueConfig.test_clear_caches
print("STOP")

这是我打印的输出。

<class 'addons.product.tests.test_product_attribute_value_config.TestProductAttributeValueSetup'>
<function TestProductAttributeValueConfig.test_clear_caches at 0x7f680f0c6d90>
START
IN Class
OUT
STOP

我的猴子补丁中的方法从未被调用,测试失败。

2020-02-14 09:20:23,851 840 ERROR test_60 odoo.addons.product.tests.test_product_attribute_value_config: ERROR: test_clear_caches (odoo.addons.product.tests.test_product_attribute_value_config.TestProductAttributeValueConfig) 
2020-02-14 09:20:23,851 840 ERROR test_60 odoo.addons.product.tests.test_product_attribute_value_config: ` The goal of this test is to make sure the cache is invalidated when it should be. 
2020-02-14 09:20:23,851 840 ERROR test_60 odoo.addons.product.tests.test_product_attribute_value_config: Traceback (most recent call last): 
2020-02-14 09:20:23,851 840 ERROR test_60 odoo.addons.product.tests.test_product_attribute_value_config: `   File "/home/antonp/workspace/Odoo12/addons/product/tests/test_product_attribute_value_config.py", line 494, in test_clear_caches 
2020-02-14 09:20:23,851 840 ERROR test_60 odoo.addons.product.tests.test_product_attribute_value_config: `     self.env['product.product'].browse(variant_id).unlink() 
2020-02-14 09:20:23,851 840 ERROR test_60 odoo.addons.product.tests.test_product_attribute_value_config: `   File "/home/antonp/workspace/Odoo12/addons/product/tests/test_variants.py", line 781, in unlink 
2020-02-14 09:20:23,851 840 ERROR test_60 odoo.addons.product.tests.test_product_attribute_value_config: `     raise Exception('just') 
2020-02-14 09:20:23,851 840 ERROR test_60 odoo.addons.product.tests.test_product_attribute_value_config: ` Exception: just 

您需要修补对 test_clear_caches 的绝对引用:

odoo.addons.product.tests.test_product_attribute_value_config.TestProductAttributeValueConfig.test_clear_caches

尝试使用以下代码:

import odoo


@odoo.tests.tagged('post_install', '-at_install')
class TestProductAttributeValueConfig(
    odoo.addons.product.tests.test_product_attribute_value_config.TestProductAttributeValueConfig):

    def test_clear_caches(self):
        print("IN method")


odoo.addons.product.tests.test_product_attribute_value_config.TestProductAttributeValueConfig.test_clear_caches = \
    TestProductAttributeValueConfig.test_clear_caches