Có thể tạo đối tượng giả với trình khởi tạo bị vô hiệu hóa và các thuộc tính được bảo vệ được định cấu hình thủ công không?phpunit - mockbuilder - đặt đối tượng thuộc tính bên trong đối tượng
Dưới đây là một ví dụ ngu ngốc:
class A {
protected $p;
public function __construct(){
$this->p = 1;
}
public function blah(){
if ($this->p == 2)
throw Exception();
}
}
class ATest extend bla_TestCase {
/**
@expectedException Exception
*/
public function testBlahShouldThrowExceptionBy2PValue(){
$mockA = $this->getMockBuilder('A')
->disableOriginalConstructor()
->getMock();
$mockA->p=2; //this won't work because p is protected, how to inject the p value?
$mockA->blah();
}
}
Vì vậy, tôi muốn tiêm giá trị p được bảo vệ, vì vậy tôi không thể. Tôi có nên xác định setter hoặc IoC, hoặc tôi có thể làm điều này với phpunit?
Chỉ để lưu hồ sơ - nếu bạn đang thử nghiệm API không công khai, thì bạn đang làm sai. Thử nghiệm đơn vị là về hành vi thử nghiệm, không phải là thực hiện nội bộ. –