我正在为类看起来像单位测试:
class example {
public function __construct($param1, $param2) {
$this->param1 = $param1
$this->param2 = $param2
}
}
是否有可能在构造函数执行后测试$ this-> param1和$ this-> param2是否存在?我已经谷歌搜索了这个,但没有找到一个有效的答案。我尝试使用Assertion contain,但这也没有用。
答案 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);
}
}