I want write a test for php function using phpunit.
I have a class named 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;
}
}
A class MemberService
, it is target to be tested:
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();
}
}
}
And a phpunit test case:
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
}
}
Then i run the test, get error: Fatal error: Undefined class constant 'STATUS_DELETED' in ...
Member::STATUS_DELETED
it's just a const variable, it also can put in some otherwhere, but i don't want to move it.
How can i mock static variable/property?