Unit testing 在使用PHPUnit进行测试时,如何设置Doctrine2装置?

Unit testing 在使用PHPUnit进行测试时,如何设置Doctrine2装置?,unit-testing,doctrine-orm,symfony,Unit Testing,Doctrine Orm,Symfony,我正在尝试开始使用Symfony2,并且一直在尝试为我的应用程序的模型层设置自动测试。Symfony2这本书讨论了控制器的单元测试,但是我找不到很多模型测试的例子 我希望在每次测试运行之前有一个干净的数据集,并找到以下文章: 基于sznapka.pl文章,我实际运行了一个测试,没有错误,但是尽管创建了测试模式,但没有加载装置。我不明白为什么,甚至不知道如何调试它 背景:我以前使用过CakePHP,其中夹具的加载基本上是自动处理的,也许我对Symfony/Doctrine有错误的方法?是的

我正在尝试开始使用Symfony2,并且一直在尝试为我的应用程序的模型层设置自动测试。Symfony2这本书讨论了控制器的单元测试,但是我找不到很多模型测试的例子

我希望在每次测试运行之前有一个干净的数据集,并找到以下文章:

基于sznapka.pl文章,我实际运行了一个测试,没有错误,但是尽管创建了测试模式,但没有加载装置。我不明白为什么,甚至不知道如何调试它


背景:我以前使用过CakePHP,其中夹具的加载基本上是自动处理的,也许我对Symfony/Doctrine有错误的方法?

是的,DoctrineTexture是一个不错的选择

要测试模型:您实际上不需要在数据库中加载装置,您应该使用所需的数据创建对象(通过使用setter注入数据)

要测试控制器:在每个测试用例之前加载并使用,使数据库的状态相同,在
setUp()
中开始事务,并在
tearDow()中回滚。(如果您的控制器也使用事务,我还没有找到一个好的解决方案)


对于fixtures error,如果没有任何错误,并且没有加载fixtures,则可能缺少命名约定。你能给我们看一些代码吗?

看看。我不认为使用事务是最好的主意,因为您可能会在代码中使用事务。此解决方案建议在每次测试中手动加载夹具。

有一个非常方便的方法,可以简化测试中使用夹具的工作。基本思想是每次运行测试时创建一个数据库,然后加载设备。现在,您可以保存模型、删除、每个测试,它们都是一样的。

(开始为放弃这个问题感到内疚)不得不从Symfony探索转移到其他项目,但希望很快回来。我目前的感觉是,在Symfony中采用更轻的方法更合适,正如下面jules所建议的那样。例如,我们不需要测试持久层,我们应该始终尝试围绕对象图的边缘进行测试。