PHPUnit 3.7
三个星期以来,我正在使用PHPUnit进行测试并做了很多简单的Unittest(也有dataPrividers) - 我喜欢它。
我努力模仿物体的最后几天 - 没有成功: - (
我想测试以下静态函数: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;
}
}
它有效:
# 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);
}
}
它有效,但不好的是这个测试取决于类User
或我用来构建测试所需对象的其他类 - 我认为这不是一个好的测试设计。
在这种情况下,我如何模拟此案例的对象或什么是良好的测试习惯?
答案 0 :(得分:0)
好吧,我没有找到其他解决方案,虽然我认为我做测试的方式并不是很好 - 也许它是最好的解决方法。
在PHPUnit-Documentation上我找到了:
限制:final,private和static方法
请注意,最终的私有和静态方法不能被存根或模拟
我不是很害羞,但对我而言,听起来好像使用PHPUnit来测试具有对象依赖性的静态方法。