PHPUnit数据提供程序错误

4

我刚开始使用PHPUnit,并为一个非常简单的库编写测试。它只包含两个类,所以我认为这是一个很好的起点,以便我可以掌握单元测试的工作方式。

我没有遇到任何问题就完成了第一类测试,但是第二类测试让我头痛,因为我无法弄清楚问题出在哪里。似乎我的数据提供程序存在某些错误。

<?php

use PIFlex\Roulette\Roulette;

class RouletteTest extends PHPUnit_Framework_TestCase
{
    protected $roulette;

    public function setUp()
    {
        $this->roulette = new Roulette();
    }

    /*
     * @dataProvider addItemDataProvider
     */
    public function testAddItem($item)
    {
        $this->assertInstanceOf(
            'PIFlex\Roulette\Roulette',
            $this->roulette->addItem($item, 1)
        );
    }

    public function addItemDataProvider()
    {
        return array(
            array("string"),
            array(1),
        );
    }
}

它给我抛出了以下错误:
There was 1 error:

1) RouletteTest::testAddItem
Missing argument 1 for RouletteTest::testAddItem()

/home/igor/Dropbox/www/Github/PIFlexRoulette/test/PHPUnit/Roulette/RouletteTest.php:22

FAILURES!
Tests: 12, Assertions: 11, Errors: 1.
2个回答

25

你的注释格式不正确。应该以“**”开头,请修改为:

/*
 * @dataProvider addItemDataProvider
 */

进入:

/**
 * @dataProvider addItemDataProvider
 */

好的发现。漏掉了那个。 - Reactgular
等一下,什么?为什么?这个有效了,谢谢。看起来是一个有点奇怪的要求。 - Andrew

0

...在@Cyprian's answer的基础上进行扩展...

PHPUnit文档中关于注释的附录指出:

注释是一种特殊的语法元数据,可以添加到某些编程语言的源代码中。虽然PHP没有专门用于注释源代码的语言特性,但在PHP社区中已经建立了使用诸如@annotation arguments等标记在文档块中注释源代码的惯例。在PHP文档块中是反射性的:它们可以通过Reflection API的getDocComment()方法在函数、类、方法和属性级别上访问。像PHPUnit这样的应用程序在运行时使用此信息来配置其行为。——PHPUnit文档

getDocComment()反射适用于:

虽然没有文档说明需要两个星号,但在注释部分中有提到,ReflectionClass::getDocCommentReflectionFunctionAbstract::getDocComment

资源


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接