PHPUnit的3.7的PHPUnit:用於測試靜態方法
自從三星期,我正在使用PHPUnit進行測試,並做了很多簡單的單元測試(也有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
或我用另一個類來構建測試所需的對象 - 我認爲這不是一個好的測試設計。
我該如何嘲笑這個案例的對象,或者在這種情況下什麼是良好的測試實踐?
你說你三週前開始用PHPUnit進行測試。爲什麼選擇多年不受支持的PHPUnit版本? –
在我的Linux發行版中我有php 5.5.9,我正在使用composer來安裝phpunit,selenium,dbunit,... composer顯示衝突直到我選擇phpunit 3.7。當我現在升級我的整個開發IDE時,我必須進一步完成我的項目,並擔心時間問題。沒有好主意? – Didgejo
PHPUnit 4.8支持PHP 5.3,PHP 5.4,PHP 5.5和PHP 5.6。 –