您的位置:首页 > 其它

解决Missing argument 1 for…

2016-04-23 22:45 169 查看
原文地址:解决Missing argument 1 for DataTest::testAdd()作者:晨风在使用PHPUnit的DataProvider方法时,按官方帮助文档所说编写测试脚本如下:

<?php

class DataTest extends PHPUnit_Framework_TestCase

{

  public function provider()

  {

    
return array(

           
array(0, 0, 0),

           
array(0, 1, 1),

           
array(1, 0, 1),

           
array(1, 1, 3)

          
);

  }

public function testAdd($a, $b, $c)

{

   
$this->assertEquals($c, $a + $b);

 }

}

?>

运行该测试脚本时总会出现如下错误提示:
Missing
argument 1 for DataTest::testAdd()

于是上google和baidu分别搜索了一把,能找到的帮助不多,但基本上有以下两种解决方案

方案一:是说provider()方法必须是静态的,也就是说该方法应该写成如下形式:

public static function provider()

  {

    
return array(

           
array(0, 0, 0),

           
array(0, 1, 1),

           
array(1, 0, 1),

           
array(1, 1, 3)

          
);

  }

方案二:不仅将provider()方法设计成静态的,而且还将整个代码改成如下样式:
[code]<?php

[/code]

class DataTest extends PHPUnit_Framework_TestCase
{
    protected static $myData = array(
      array(0, 0, 0),
      array(0, 1, 1),
      array(1, 0, 1),
      array(1, 1, 3)
    );

 
    public static function provider()
    {
        return self::$myData;
    }

 
  
 
public function testAdd($a, $b, $c)
    {
        $this->assertEquals($c, $a + $b);
    }
}
?>

其实方案一和二有着异曲同工之处,但不论我怎么改问题依然如故。

无奈之余,我将代码进行归并整理,又写成了如下样式:
<?php

class DataTest extends PHPUnit_Framework_TestCase

{

  public static function provider()

  {

    
return array(

           
array(0, 0, 0),

           
array(0, 1, 1),

           
array(1, 0, 1),

           
array(1, 1, 3)

          
);

  }

 

 public function testAdd($a, $b, $c)

{

   
$this->assertEquals($c, $a + $b);

 }

}

?>

再次试着运行测试脚本,让人兴奋的是居然可以成功运行了,呵呵,真有柳暗花明的妙处。细看下来解决此问题主要有以下两点:

1.provider必须是静态方法,因此该方法添加了static关键字;

2.注释 @dataProvider
provider确是至关重要的,该注释指明了测试方法要调用的provider,将返回一个包含有数组参数的数组对象供测试方法调用。
  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: