在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手册中的夹具。