douzhuanqian8244 2018-07-10 03:06 采纳率: 100%
浏览 51

如何在phpunit中模拟静态变量/属性?

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?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
    • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
    • ¥15 MATLAB中streamslice问题
    • ¥15 如何在炒股软件中,爬到我想看的日k线
    • ¥15 51单片机中C语言怎么做到下面类似的功能的函数(相关搜索:c语言)
    • ¥15 seatunnel 怎么配置Elasticsearch
    • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
    • ¥15 (标签-MATLAB|关键词-多址)
    • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
    • ¥500 52810做蓝牙接受端