PHPUnit 3,7PHPUnit: Лучшая практика для тестирования статического метода
С три недели я тестирование с 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;
}
}
И i т работы:
# 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, и я использую композитор для установки phpunit, selenium, dbunit, ... композитор показал конфликты, пока не выберу phpunit 3.7. Мне нужно идти дальше с моим проектом и бояться проблем со временем, когда я сейчас обновляю всю свою Developing-IDE. Нет хорошей идеи? – Didgejo
PHPUnit 4.8 поддерживается на PHP 5.3, PHP 5.4, PHP 5.5 и PHP 5.6. –