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

run single unit tests for a module efficiently

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

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

用 Odoo 做 TDD 真的很难,因为大多数模块依赖于其他模块,而其他模块仍然依赖于其他一些模块等等...

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

同一模块还包含我在 Odoo 上完成的 "anything custom" 的所有测试。虽然您可以将每个模块测试放在模块本身内,但当某些测试无缘无故 运行 时,我遇到了一些问题。所以我决定将它们全部放在一个模块中

所以每当我推送新的提交时。这是我用来 运行 测试的命令(假设我的模块被命名为 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 测试也很有帮助。

从 'run single unit test case' 编辑了我自己的问题。这个命令对我有用:

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

这和danidee的回答很相似。

但是,解决方案似乎是 而不是 使用 --test-file 参数,因为这会意外地运行所有依赖模块的所有测试并执行任何其他操作,使其成为执行时间太长。

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

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