Php Yii单元测试中的数据提供者

Php Yii单元测试中的数据提供者,php,unit-testing,yii,Php,Unit Testing,Yii,我正在使用Yii 1.1.7。我刚刚被介绍到Yii中的单元测试,我已经安装并配置了PHPUnit。我可以成功地运行一些基本测试。我想知道如何(如果可能的话)使用数据提供程序来执行测试 下面是我的示例测试类: <?php require_once('bootstrap.php'); class SampleControllerTest extends CTestCase{ /* * @dataProvider provider */ public function t

我正在使用Yii 1.1.7。我刚刚被介绍到Yii中的单元测试,我已经安装并配置了PHPUnit。我可以成功地运行一些基本测试。我想知道如何(如果可能的话)使用数据提供程序来执行测试

下面是我的示例测试类:

<?php

   require_once('bootstrap.php');

   class SampleControllerTest extends CTestCase{

/*
 *  @dataProvider provider
 */
public function testSampleMethod($param1,$param2,$param3,$param4)
{
   $this->assertGreaterThan(0,$ApplicationID);
}


public function provider()
{
    return array(
      array("1875","1","1","False"),
      array("1874","1","1","False"),
      array("1415","1","1","False"),
      array("1414","1","1","False"),
      array("1413","1","1","False"),
    );

}


   }

?>

在PHPUnit上运行测试时,出现以下错误:

SampleController::testSampleMethod()缺少参数1

我知道功能测试更适合控制器,单元测试更适合模型。我只是想让数据提供程序运行


提前感谢。

testSampleMethod因为您的方法名称以单词test开头,所以在运行测试时由Yii运行。但是它不能有参数,因为它会被自动调用,我怎么知道你想用数组调用这个函数呢

你也许可以做一个

/*
 *  @dataProvider provider
 */
public function checkSampleMethod($param1,$param2,$param3,$param4)
{
   $this->assertGreaterThan(0,$ApplicationID);
}

/*
 *  @dataProvider provider
 */
public function testSampleMethod()
{
    foreach($this->provider() as $params) {
        list($param1, $param2, $param3, $param4) = $params;
        $this->checkSampleMethod($param1,$param2,$param3,$param4);
    }
}

或类似的内容。

对不起,错误是缺少SampleControllerTest::testSampleMethod()的参数1。很抱歉,但是testSampleMethod中的代码是:$this->AssertGreatertThan(0,$param1);这是可行的,我不确定这是否是正确的方法,但是,它确实运行了测试。谢谢Mihai P,这是一种非常有趣的执行测试的方法。您可以尝试使用fixture而不是函数。我还看到您正在尝试使用phpunit(不含硒)测试控制器。我找到了这些链接,告诉你如何做到这一点。我还没有尝试过它们,因为我已经启动并运行了selenium测试,但运行速度很慢,所以我可能会尝试一下。当然,没有selenium的测试并不能测试Yii附带的所有javascript功能。谢谢Mihai P,你的假设是对的。这些链接非常有用,再次感谢。不用担心,这里关于Yii的问题非常基本,看到一些好的做法,我觉得很新鲜:)