解决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]
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,将返回一个包含有数组参数的数组对象供测试方法调用。
<?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,将返回一个包含有数组参数的数组对象供测试方法调用。
相关文章推荐
- mysql 空值,null与not null
- php页面js隐藏域的运用
- php复选框中获取文本框、密码域、…
- php实现二维数组转置
- eclipse出现 Some character…
- 关于编程语句i++与++i的区别用法
- 使用循环语句输出空心金字塔
- Spark机器学习(四) Local matrix -- Data Types
- C++静态多态性之函数重载
- 【转】单身女孩在魔都 如何活出贵族范
- C++中#error/assert/static_assert的区别及使用
- C++中#error/assert/static_assert的区别及使用
- 中国这100个地方,你去过几个?
- 资深后台研发工程师(转)
- 文章标题
- 数值的整数次方
- 1015 Knight Moves
- jQuery源码学习之对象创建与初始化
- Oracle数据库触发器如何调用Java程序实现Openfire消息推送
- Spring配置文件异常:White spaces are required between publicId and systemId