phpunit:静态法测试的最佳实践
PHPUnit 3.7 三周以来,我一直在使用PHPUnit进行测试,并且做了很多简单的单元测试(也使用dataPrividers)——我喜欢它 在过去的日子里,我一直在努力模拟对象-没有成功:-( 我想测试以下静态函数:phpunit:静态法测试的最佳实践,php,oop,testing,phpunit,Php,Oop,Testing,Phpunit,PHPUnit 3.7 三周以来,我一直在使用PHPUnit进行测试,并且做了很多简单的单元测试(也使用dataPrividers)——我喜欢它 在过去的日子里,我一直在努力模拟对象-没有成功:-( 我想测试以下静态函数:Tools::getValue();。它获取一些对象和该对象的属性名称,做一些事情,并返回属性值。我经常使用这些函数 是用getMock测试它吗?我到现在还没有成功,阅读也没有帮助 # Tools.php <?php class User { publi
Tools::getValue();
。它获取一些对象和该对象的属性名称,做一些事情,并返回属性值。我经常使用这些函数
是用getMock
测试它吗?我到现在还没有成功,阅读也没有帮助
# Tools.php
<?php
class User
{
public $lastname, $city;
}
class Tools
{
/**
* Gets an attribute of my_object -> trimms the spaces and gives it back in uppercase.
* This work for any object/attribute.
*
* @param type $my_object
* @param string $attribute is a name of an attribute of my_object
* @return string
*/
public static function getValue($my_object, $attribute)
{
$value = $my_object->$attribute;
$ret = strtoupper(trim($value));
return $ret;
}
}
#Tools.php
好吧,我没有找到其他解决方案,尽管我认为我做测试的方式不是很好——也许这是最好的解决办法
在PHPUnit文档中,我发现:
限制:final、private和static方法
请注意,final、private和static方法不能被存根或模拟
我不是舒尔,但对我来说,用PHPUnit测试依赖对象的静态方法似乎是不可能的。你说你三周前开始用PHPUnit测试。你为什么选择多年不支持的PHPUnit版本?在我的Linux发行版上,我有PHP5.5.9,我正在使用composer安装phpunit、selenium、dbunit…composer在我选择phpunit 3.7之前一直存在冲突。现在升级整个开发IDE时,我不得不继续我的项目,担心时间问题。没有好主意?phpunit 4.8在PHP5.3、PHP5.4、PHP5.5和PHP5.6上受支持。好的,我重新安装了composer,更改了配置…这次编写r安装了phpunit 4.8:-)现在请回到我上面的问题。
# use.php
<?php
$teacher = new User();
$teacher->lastname = "Kennwood";
$teacher->city = "New York";
echo Tools::getValue($teacher, "lastname");
// Result KENNWOOD
# ToolsTest.php
<?php
class ToolsTest extends PHPUnit_Framework_TestCase
{
public function testGetValue()
{
$teacher = new User();
$teacher->lastname = "Kennwood";
$teacher->city = "New York";
$actual = Tools::getValue($teacher, "lastname");
$this->assertEquals("KENNWOOD", $actual);
}
}