【问题标题】:Data Providers in Yii Unit TestingYii 单元测试中的数据提供者
【发布时间】:2014-03-14 03:16:29
【问题描述】:

我使用的是 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

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

提前致谢。

【问题讨论】:

  • 抱歉,错误是 缺少 SampleControllerTest::testSampleMethod() 的参数 1
  • 对不起,testSampleMethod 中的代码是:$this->assertGreaterThan(0,$param1);

标签: php unit-testing yii


【解决方案1】:

testSampleMethod 因为您的方法名称以单词 test 开头,然后在运行测试时由 Yii 运行。但是它不能有参数,因为它是自动调用的,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);
    }
}

或类似的东西。

【讨论】:

  • 这行得通,我不确定这是否是正确的方法,但是,它确实运行了测试。谢谢 Mihai P,这是一种非常有趣的测试方式。
  • 您可以尝试使用固定装置而不是您的功能。我还看到您正在尝试使用 phpunit(不带硒)测试控制器。我发现这些链接告诉你如何做到这一点mattmccormick.ca/2012/09/14/…insperedia.blogspot.com.auenginedave.wordpress.com/2011/07/09/writing-a-simple-unit-test。我还没有尝试过它们,因为我已经启动并运行了 selenium 测试,但是运行速度很慢,所以我可能会试一试。
  • 当然,没有 selenium 的测试并不能测试 Yii 附带的所有 javascript 好东西。
  • 谢谢 Mihai P,您的假设是正确的。这些链接非常有用,再次感谢。
  • 不用担心,这里在 Yii 上提出的问题非常基础,我觉得看到一些好的做法令人耳目一新:)
猜你喜欢
  • 2020-05-01
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2010-09-10
相关资源
最近更新 更多