Я хочу написать тест для функции php с помощью phpunit.
У меня есть класс Member:
class Member {
public static STATUS_DELETED = 'deleted';
public static STATUS_NORMAL = 'normal';
private $name;
private $status;
public function getName() {
return $this->name();
}
public function getStatus() {
return $this->status;
}
}
Класс MemberService, он подлежит тестированию:
class MemberService() {
public function printMember(Member $member) {
// Maybe some other logic, it's just a sample
$status = $member->getStatus();
// this line will get error when run test!
if ($status == ‘Member::STATUS_DELETED’) {
echo "this member " . $member->getName() . " has deleted";
} else {
echo $member->getName();
}
}
}
И тестовый пример phpunit:
class MemberServiceTest extends MyUnitTestCase {
protected function setUp() {
}
protected function tearDown() {
}
public testPrintMember() {
$memberService = new MemberService();
// mock member
$member = $this->createMock(Member::class);
$member->method('getName')
->willReturn('zhangsan');
$member->method('getStatus')
// can not use Member::STATUS_NORMAL in there after mock
->willReturn('normal');
$MemberService->printMember($member);
// assert some thing in there
}
}
Затем я запускаю тест и получаю сообщение об ошибке: Fatal error: Undefined class constant 'STATUS_DELETED' in ....
Member::STATUS_DELETED - это просто константная переменная, ее также можно поместить в другое место, но я не хочу ее перемещать.
Как я могу издеваться над статической переменной / свойством?
сделайте его const STATUS_DELETED = 'deleted';, чтобы вы могли обращаться к нему как к константе, например Member::STATUS_DELETED. Прямо сейчас он объявлен как статическая переменная (кстати, тогда это должен быть $STATUS_DELETED)






‘Member::STATUS_DELETED’, почему в этом коде есть цитата? Я не думаю, что здесь нужна цитата, поскольку это постоянная переменная.