2016-09-26 7 views
0

Я пишу юнит-тесты для класса, глядя, как это:как проверить, если переменные существуют в функции с PHPUnit

class example { 

    public function __construct($param1, $param2) { 
     $this->param1 = $param1 
     $this->param2 = $param2 
    } 
} 

Можно ли проверить, если $ this-> param1 и $ this-> param2 существует после выполнения конструктора? Я уже искал это для поиска, но не нашел правильного ответа на этот вопрос. Я попробовал его с Assertion contain, но это тоже не сработало.

ответ

2

Если вы хотите узнать, были ли свойства присвоены указанные значения в результирующем объекте, используйте Reflection class. В вашем примере, если вы свойства являются общедоступными:

public function testInitialParams() 
{ 
    $value1 = 'foo'; 
    $value2 = 'bar'; 
    $example = new Example($value1, $value2); // note that Example is using 'Standing CamelCase' 
    $sut = new \ReflectionClass($example); 

    $prop1 = $sut->getProperty('param1'); 
    $prop1->setAccessible(true); // Needs to be done to access protected and private properties 
    $this->assertEquals($prop2->getValue($example), $value1, 'param1 got assigned the correct value'); 

    $prop2 = $sut->getProperty('param2'); 
    $prop2->setAccessible(true); 
    $this->assertEquals($prop2->getValue($example), $value2, 'param2 got assigned the correct value'); 
} 
+0

Это Dont работы, получили этот ErrorMessage: не экземпляр ожидаемого класса «ReflectionProperty» – nova

+1

К сожалению, ждать починки :-) – BVengerov

+0

Окей, спасибо, скажите мне, когда вы Сделано – nova

1

Вы не заявили о каких-либо видимость на $this->param1 или $this->param2, так что по умолчанию они будут публичными.

Имея это в виду, вы должны просто быть в состоянии проверить, как следующие:

public function testConstructorSetsParams() 
{ 
    $param1 = 'testVal1'; 
    $param2 = 'testVal2'; 

    $object = new example($param1, $param2); 

    $this->assertEquals($param1, $object->param1); 
    $this->assertEquals($param2, $object->param2); 
} 
+0

Невозможно получить доступ к непубличному члену, вам нужно установить их доступными сначала – nova

+0

Хмм, работает для меня. Были ли установлены ограничения видимости для свойств? – Dezza

1

Существует утверждение assertAttributeSame(), который позволяет смотреть на публике, защищенные и частные свойства класса.

Смотрите пример:

class ColorTest extends PHPUnit_Framework_TestCase { 
public function test_assertAttributeSame() { 

    $hasColor = new Color(); 

    $this->assertAttributeSame("red","publicColor",$hasColor); 
    $this->assertAttributeSame("green","protectedColor",$hasColor); 
    $this->assertAttributeSame("blue","privateColor",$hasColor); 

    $this->assertAttributeNotSame("wrong","privateColor",$hasColor); 
    } 

} 

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

  • Нет связанных вопросов^_^