如何使用phpunit测试变量是否存在于函数中

时间:2016-09-26 11:40:56

标签: php unit-testing testing phpunit this

我正在为类看起来像单位测试:

class example {

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

是否有可能在构造函数执行后测试$ this-> param1和$ this-> param2是否存在?我已经谷歌搜索了这个,但没有找到一个有效的答案。我尝试使用Assertion contain,但这也没有用。

3 个答案:

答案 0 :(得分: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');
}

答案 1 :(得分: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);
}

答案 2 :(得分: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);
    }

}