PHP Protect属性不能是公共的,但在测试中是必需的



在Result类中,我必须有一个受保护的属性$message,但当我在Maintest.php文件中运行代码测试时,我可以读取"成功添加集合";消息字符串,但由于它受到保护,我无法针对实际对象断言它。我不能公开。

如果你需要更多信息,请查看在线评论并问我任何问题

// Result.php
class Result
{   
protected $message = ""; // must be protected
static function success($message='')
{
return new Result ( 0, $message );
}
private function __construct( $message)
{
$this->message = $message;
}

public function getMessage(){
return $message;
}
}

型号.php

function addNewNavDbSet($set){
$set = ModelSet::init($set["name"],$set["visibility"],$set["name"],$set["info"]);
$this->ModelDbProvider->addNewSet($set);
$this->getResult('Succesfully added Set');
return Result::success ('Succesfully added Set'); // cannot access protected property, but I cannot make it public
}

function getResult($message) {
return $message;
}

MainTest.php

class MainNavTest extends PHPUnitFrameworkTestCase
{

function __construct(){
parent::__construct();
$this->Model = new Model();
}

public function testSaveProperty()
{
$mySet = $this->Model->addNewSet("test ADD", 1,"hello world", "test", '1');
var_dump($mySet); // returns object with string 'succesfully added set'.
var_dump(Result::getMessage());
$this->assertStringContainsString('Succesfully added Set', Result::getMessage());
}
}

/测试/应用程序/模型/MainTest.php

错误:调用未定义的方法MainNavTest::assertStringContainsString((

错误!测试:1,断言:0,错误:1。

要清除:

错误:调用未定义的方法MainNavTest::assertStringContainsString((

IIRC删除:

function __construct(){
parent::__construct();
$this->Model = new Model();
}

来自测试用例的测试应该成功。

该方法通常是Phpunit的一部分,请参阅Phpunit手册中的断言

并且不要在测试用例中重新引入任何__construct()方法。

如果您不想在具体的测试用例方法中进行设置,请使用拟合挂钩方法,例如setUp,我猜在您的情况下:

function setUp(): void
{
parent::setUp();
$this->Model = new Model();
}

参见Phpunit手册中的夹具。

最新更新