2017-01-15 3 views
0

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 или другой класс, который я использую для создания необходимого объекта для теста - и я думаю, что это не хороший дизайн тестирования.

Как я мог издеваться над объектом для этого случая или что такое хорошая практика тестирования в этом случае?

+4

Вы говорите, что вы начали тестирование с помощью PHPUnit три недели назад. Почему вы выбрали версию PHPUnit, которая не поддерживается в течение многих лет? –

+0

В моем дистрибутиве Linux у меня есть php 5.5.9, и я использую композитор для установки phpunit, selenium, dbunit, ... композитор показал конфликты, пока не выберу phpunit 3.7. Мне нужно идти дальше с моим проектом и бояться проблем со временем, когда я сейчас обновляю всю свою Developing-IDE. Нет хорошей идеи? – Didgejo

+1

PHPUnit 4.8 поддерживается на PHP 5.3, PHP 5.4, PHP 5.5 и PHP 5.6. –

ответ

0

Хорошо, я не нашел другого решения, и хотя я думаю, что способ, которым я прошел тест, на самом деле не очень хорош - возможно, это лучший обходной путь.

На PHPUnit-документации я нашел:

Ограничение: конечные, частные и статические методы

Пожалуйста, обратите внимание, что конечные, частные и статические методы не могут быть погасил или издевались

Я не совсем уверен, но мне кажется, что тестирование статических методов с зависимостями объектов невозможно с помощью PHPUnit.

Смежные вопросы