解决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()方法设计成静态的,而且还将整个代码改成如下样式:

<?php

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,将返回一个包含有数组参数的数组对象供测试方法调用。
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值