有效地运行模块的单个单元测试

时间:2017-01-03 13:45:40

标签: openerp odoo-9

祝大家新年快乐!我想在新的一年里写更多的单元测试,但是如何更轻松地处理呢?我发现在通过--test-enable--stop-after-init命令行参数更新模块时运行测试。我还读过--test-file parameter,但它不起作用。此参数也未在文档中描述。

你会如何进行TDD(测试驱动开发)?为此,您必须能够快速运行测试。要求使用所有依赖项测试整个模块,这使得经常编写测试变得不切实际。如何运行单个单元测试用例?

2 个答案:

答案 0 :(得分:4)

编辑自己的问题来自运行单个单元测试用例'。这个命令对我有用:

python ./odoo.py -i module_to_test --log-level=test -d minimal_database --test-enable --stop-after-init

这与danidee的回答非常相似。

然而,使用--test-file参数的解决方案似乎,因为这会意外地运行所有相关模块的所有测试,并执行其他任何操作,使其执行时间过长。

该解决方案的另一部分是使用一个最小的数据库,其中只安装了要测试的模块及其依赖性。

现在上面的命令只需几秒钟即可在我的机器上执行,即使测试的代码使用了依赖模块中的对象。如果只是我可以阻止模块每次运行测试时进行更新,以使其更快更有效...

答案 1 :(得分:2)

使用Odoo进行TDD真的很困难,因为大多数模块都依赖于其他依赖于其他模块的模块等等......

但对我来说有用的是有一个自定义模块来安装我创建的所有其他自定义模块,

这个模块还包含我在Odoo上所做的“任何自定义”的所有测试。虽然您可以将每个模块测试放在模块本身内,但是当某些测试没有无理由运行时我遇到了一些问题。所以我决定将所有这些都放在一个模块中

所以每当我推送一个新的提交。这是我用来运行测试的命令(假设我的模块名为all_modules

python odoo.py --addons=addons_path -i all_modules --log-level=test -d Test_Database --test-enable --xmlrpc-port=80xx --stop-after-init

在此之前,我已经拥有了一个数据库(Test_Database),它是我的生产环境的克隆(因此我可以针对实际数据进行测试),其中运行测试。

对于部署,我只需使用rsync并复制文件。

我的测试速度相当快(约5分钟)因为我正在测试克隆的数据库,而且因为我只运行我已构建的自定义模块的测试

我知道这不是标准的TDD,但是Odoo不符合软件开发中的很多模式,而且大多数时候你必须找到平衡并找出适合你的方法。

我个人认为run-bot过于复杂且资源匮乏。

PS:进行Selenium测试也很有帮助。