【问题标题】:Zend Studio and PHPUnit getting started problemsZend Studio 和 PHPUnit 入门问题
【发布时间】:2011-08-18 17:47:23
【问题描述】:

我正在尝试创建我的第一个单元测试。我使用 Zend Studio,并通过以下方式将 phpUnit 库添加到我的项目中:

Project -> Properties -> Add Library

当我将它作为 PHP 单元测试运行时,我收到以下错误:

Unable to run a PHPUnit session. Only PHPUNIT classes can be run as PHPUnit tests. Reason: Not tests found in IndexControllerTest.php

IndexControllerTest.php:

<?php
require_once 'application\controllers\IndexController.php';
require_once 'PHPUnit\Framework\TestCase.php';
/**
 * IndexController test case.
 */
class IndexControllerTest extends PHPUnit_Framework_TestCase
{
    /**
     * @var IndexController
     */
    private $IndexController;
    /**
     * Prepares the environment before running a test.
     */
    protected function setUp ()
    {
        parent::setUp();
        // TODO Auto-generated IndexControllerTest::setUp()
        $this->IndexController = new IndexController(/* parameters */);
    }
    /**
     * Cleans up the environment after running a test.
     */
    protected function tearDown ()
    {
        // TODO Auto-generated IndexControllerTest::tearDown()
        $this->IndexController = null;
        parent::tearDown();
    }
    /**
     * Constructs the test case.
     */
    public function __construct ()
    {
        // TODO Auto-generated constructor
    }
    /**
     * Tests IndexController->init()
     */
    public function testInit ()
    {
        // TODO Auto-generated IndexControllerTest->testInit()
        $this->markTestIncomplete("init test not implemented");
        $this->IndexController->init(/* parameters */);
    }
    /**
     * Tests IndexController->indexAction()
     */
    public function testIndexAction ()
    {
        // TODO Auto-generated IndexControllerTest->testIndexAction()
        $this->markTestIncomplete("indexAction test not implemented");
        $this->IndexController->indexAction(/* parameters */);
    }
}

我该如何解决这个问题?

【问题讨论】:

  • 你是如何运行测试的?您是否执行了“右键单击脚本”>“运行方式”>“PHPUnit 测试”?
  • 是的,这正是我所做的。
  • 删除 parent:: 调用并再试一次,尽管这不应该是错误的原因(调用只是不需要)。我有时会遇到这个错误,但是当我第二次重新运行测试时它通常会消失。
  • 我刚刚做了,我得到了同样的东西。 :(
  • 嗯,奇怪。我可以很好地运行测试(用 IndexController 代替 StdClass)。可以重启 Zend Studio 吗?您是否在命令行中安装了 PHPUnit 并可以从那里查看它是否工作?

标签: php unit-testing zend-framework phpunit zend-studio


【解决方案1】:

您必须删除测试用例的__construct() 方法。 PHPUnit 将参数传递给构造函数,因此您必须将它们传递给parent::__construct(),或者——更有可能——完全删除构造函数。

另外,如果您正在使用 Zend Framework 并测试 Zend_Controller_Action 类,您可能需要考虑使用 Zend_Test_PHPUnit_ControllerTestCase,因为它为您提供了很多脚手架。请注意,每个测试都会从一条路径直接到渲染的内容,这可能不足以满足您的需求。它不适合我们,所以我分别为控制器和视图创建了基本测试用例类。

【讨论】:

  • 您可以将 __construct() 方法留在单元测试类中。这是多余的,但不会伤害任何东西。
  • @Inkspeak - 如果你的测试使用@dataProviders,构造函数会破坏它们。它也不会设置似乎会干扰单独运行测试的测试名称。
  • 我没有看到 @Teodor 使用 @dataProvider 并且根据我对原始帖子的评论,我建议他通过套件运行他的测试。感谢您的澄清。
  • 我只是说删除构造函数是迈向理智的好一步。由于所有测试都不完整,Zend Studio 可能不认为测试用例有任何测试。我将专注于首先从命令行使其工作,然后才涉及 IDE。
猜你喜欢
  • 1970-01-01
  • 2012-12-08
  • 2010-12-31
  • 2012-10-06
  • 2023-03-31
  • 2012-11-08
  • 1970-01-01
  • 2011-04-03
  • 2013-02-17
相关资源
最近更新 更多