【问题标题】:PHPUnit Test Suite doesn't workPHPUnit 测试套件不起作用
【发布时间】:2015-02-12 14:03:51
【问题描述】:

这是必须用PHPUnit Test测试的方法

public function newAction(\ReRe\Rere\Domain\Model\Modul $newModul = NULL) {
    if ($this->request->hasArgument(self::RETURNMODUL)) {
        $this->view->assignMultiple(array(self::MODULNAME => $this->request->getArgument(self::RETURNMODUL),
            self::MODULNUMMER => $this->request->getArgument(self::MODULNUMMER),
            self::GUELTIGKEITSZEITRAUM => $this->request->getArgument(self::GUELTIGKEITSZEITRAUM),
            self::FACHNAME => $this->request->getArgument(self::FACHNAME),
            self::FACHNUMMER => $this->request->getArgument(self::FACHNUMMER),
            self::PRUEFER => $this->request->getArgument(self::PRUEFER)));
    } else {
        $this->view->assignMultiple(array('newModul' => $newModul, self::GUELTIGKEITSZEITRAUM => $this->request->getArgument(self::GUELTIGKEITSZEITRAUM)));
    }
}

以下代码是从 PHPUnit 测试套件自动创建的

public function newActionAssignsTheGivenModulToView() {
    $modul = new \ReRe\Rere\Domain\Model\Modul();

    $view = $this->getMock(self::VIEWINTERFACE);
    $view->expects($this->once())->method(self::ASSIGN)->with('newModul', $modul);
    $this->inject($this->subject, 'view', $view);

    $this->subject->newAction($modul);
}

但这只是行不通。 PHPUnit 没有显示任何 cmets 为什么测试代码不起作用。我真的需要一些帮助,每一个帮助都将不胜感激,因为我对 PHPUnit 测试没有单一的知识。

【问题讨论】:

  • 阅读 PHPUnit 文档。

标签: php testing phpunit typo3 extbase


【解决方案1】:

PHPUnit 在后缀为“Test”的类中查找测试,测试用例是前缀为“test”的公共方法,如您在documentationorganizing tests 中所见

注意如果你将 PHPUnit 命令行测试运行器指向一个目录 它会寻找 *Test.php 文件。

试试

class ActionTest extends PHPUnit_Framework_TestCase
{

    public function testNewAction(\ReRe\Rere\Domain\Model\Modul $newModul = NULL) 
    {
        if ($this->request->hasArgument(self::RETURNMODUL)) {
            $this->view->assignMultiple(array(self::MODULNAME => $this->request->getArgument(self::RETURNMODUL),
            self::MODULNUMMER => $this->request->getArgument(self::MODULNUMMER),
            self::GUELTIGKEITSZEITRAUM => $this->request->getArgument(self::GUELTIGKEITSZEITRAUM),
            self::FACHNAME => $this->request->getArgument(self::FACHNAME),
            self::FACHNUMMER => $this->request->getArgument(self::FACHNUMMER),
            self::PRUEFER => $this->request->getArgument(self::PRUEFER)));
        } else {
            $this->view->assignMultiple(array('newModul' => $newModul, self::GUELTIGKEITSZEITRAUM => $this->request->getArgument(self::GUELTIGKEITSZEITRAUM)));
        }
    }
}

【讨论】:

  • 类名不需要'Test'后缀。
  • @Drumbeg,我添加了组织测试的链接
  • 只是想指出在类名中添加“Test”作为后缀不是强制性的。
  • 我确实改变了我的类测试的继承,现在它继承了你所说的 PHPUnit_Framework_TestCase,但是有了这个改变,我不能再测试我的代码了。只需继承 \TYPO3\CMS\Core\Tests\UnitTestCase 我就可以测试它。作为信息:我在 Typo3 后端使用 PHPUnit 测试,该项目是一个 extbase 项目。
  • @Nicolas Tedjadharma,实施有效吗?如果是,您可以将答案标记为已接受、投票并打开新问题并提供更多信息。你读过文档吗?关于更多测试,您可以扩展新闻类测试并编写新的测试用例。
【解决方案2】:

或者,您可以在测试方法之前添加 php 注释和 @test 注释。这样方法就可以保持任意的名字,不需要加上前缀“test”。

/**
* @test
*/
public function newActionAssignsTheGivenModulToView() {
    ///...
}

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 2015-07-08
    • 1970-01-01
    • 2018-05-12
    • 2014-09-21
    • 2014-12-13
    • 2020-11-13
    • 2015-03-15
    • 2012-07-20
    相关资源
    最近更新 更多