【问题标题】:Unit testing with Zend Framework/Doctrine 2.0使用 Zend Framework/Doctrine 2.0 进行单元测试
【发布时间】:2011-03-31 18:07:05
【问题描述】:

我想为我的 Zend Framework/Doctrine 2.0 应用程序编写单元测试,但我不太明白如何在 ZF 中设置单元测试。另外,我想在这些单元测试中包含 Doctrine 2.0。我将如何进行设置?你能给我举个例子吗?

谢谢

【问题讨论】:

  • 我也对如何在单元测试中包含 Doctrine 2 感兴趣。我什至在邮件列表上发布了一个关于它的问题,但我没有得到任何答案。
  • 我在这个问题上取得了一些进展,我会在几分钟后在这篇文章中发布我的设置。你认为应该在他们的 Doctrine 2.0 模型层中测试持久性,还是不担心这一点并将模型作为普通的 php 对象进行测试?
  • 我认为你应该只测试模型而不是学说。当他们编写自己的单元测试时。你在这方面取得了一些进展吗?
  • 这个周末我会发布一些东西。不测试持久性的两个问题:1)您无法测试存储库自定义方法,2)如果您的任何模型依赖自动 ID 才能正常工作,这将是不可能的,因为您需要使用实体管理器持久化方法。
  • 您好,如果您有一些可行的方法,您可以发布您的解决方案吗?谢谢。

标签: zend-framework doctrine phpunit zend-test


【解决方案1】:

为了设置单元测试,我为 phpunit (phpunit.xml) 创建了一个配置文件,并在测试目录中创建了一个 TestHelper.php。该配置基本上告诉 phpunit 需要执行哪个单元测试,以及需要在覆盖范围内跳过哪些文件夹和文件。在我的配置中,它只是将要执行的应用程序和库文件夹中的所有单元测试文件。

Testhelper 需要通过您的所有单元测试进行扩展。

phpunit.xml

<phpunit bootstrap="./TestHelper.php" colors="true">
    <testsuite name="Your Application">
        <directory>./application</directory>
        <directory>./library</directory>
    </testsuite>
    <filter>
        <whitelist>
            <directory suffix=".php">../application/</directory>
            <directory suffix=".php">../library/App/</directory>
            <exclude>
                <directory suffix=".phtml">../application/</directory>
                <directory suffix=".php">../application/database</directory>
                <directory suffix=".php">../application/models/Entities</directory>
                <directory suffix=".php">../application/models/mapping</directory>
                <directory suffix=".php">../application/models/proxy</directory>
                <directory suffix=".php">../application/views</directory>
                <file>../application/Bootstrap.php</file>
                <file>../application/modules/admin/controllers/ErrorController.php</file>
            </exclude>
        </whitelist>
    </filter>
    <logging>
        <log type="coverage-html" target="./log/report" title="PrintConcept" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
        <log type="testdox" target="./log/testdox.html" />
    </logging>
</phpunit>

TestHelper.php

<?php
error_reporting(E_ALL | E_STRICT);

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define testing application environment
define('APPLICATION_ENV', 'testing');

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

/**
 * Zend_Application
 */
require_once 'Zend/Application.php';

/**
 * Base Controller Test Class
 *
 * All controller test should extend this
 */
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php';

abstract class BaseControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{   
    public function setUp()
    {
        $application = new Zend_Application(APPLICATION_ENV,
                             APPLICATION_PATH . '/configs/application.ini');
        $this->bootstrap = array($application->getBootstrap(), 'bootstrap');

        Zend_Session::$_unitTestEnabled = true;

        parent::setUp();
    }

    public function tearDown()
    {
        /* Tear Down Routine */
    }
}

这仅涵盖 ZF 和 PHPunit 的初始设置

【讨论】:

  • 感谢您的反馈。您通常在所有测试用例中扩展 Zend_Test_PHPUnit_ControllerTestCase 吗?还是应该只为控制器测试扩展这个类?
  • 我的测试都扩展了 BaseControllerTestCase。但通常你应该只从 BaseControllerTestCase 扩展你的控制器测试和 PHPUnit_Framework_TestCase 的所有其他测试
猜你喜欢
  • 1970-01-01
  • 2013-10-12
  • 2012-12-25
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
相关资源
最近更新 更多