我使用Cest类进行单元测试,每个实体都有一个测试类,我可以执行一些可以读/写数据库记录的测试。
我使用PostgreSQL,其中实体可以是不同模式的一部分,因此Entity1是Schema1的一部分,它使用EntityManager1而Entity2是Schema2的一部分并使用EntityManager2。
每个Cest类在开始测试之前在_before方法中定义了Doctrin2模块的$ em实体,它工作正常。
当我设置cleanup = true来封装测试在事务中时,它无法清理(回滚事务),因为在初始化期间,代码运行首先运行Doctrin2模块的_before方法,其中每个初始/当前实体管理器设置事务。当我在Cest中更改实体管理器时,初始实体管理器无法跟踪在不同实体管理器中发生的那些更改,并认为在测试结束时无需回滚。
# unit.suite.yml
modules:
enabled: [Symfony2, Doctrine2, Asserts, UnitHelper]
config:
Doctrine2:
cleanup: true
我可以在Cest中作为嵌套事务开始我自己的事务,但它反对DRY原则。可以在_bootstrap文件中初始化正确的实体管理器,但它不会是动态的,我不知道如何根据Cest运行的那些更改它。
在运行Doctrin2模块的_before方法之前是否可以更改实体管理器?也许根本不需要使用任何操作,所有这些都可以通过其他一些设置来实现(比如每个实体的测试套装等)?