gpt4 book ai didi

phpunit - 如何对 protected 方法进行单元测试?

转载 作者:行者123 更新时间:2023-12-05 00:41:02 25 4
gpt4 key购买 nike

有没有办法对类的 protected 或私有(private)方法进行单元测试?就像现在一样,我公开了很多方法以便能够测试它们,这破坏了 API。

编辑:实际上在这里回答:Best practices to test protected methods with PHPUnit

最佳答案

您可以使用 ReflectionMethod 类和 invoke 方法来访问您的私有(private)和/或 protected 方法,但要调用该方法,您还需要类的实例在某些情况下这是不可能的。基于这个很好的例子是这个:

模拟你的类(class):

$mockedInstance = $this->getMockBuilder(YourClass::class)
->disableOriginalConstructor() // you may need the constructor on integration tests only
->getMock();

让你的方法被测试:

$reflectedMethod = new \ReflectionMethod(
YourClass::class,
'yourMethod'
);

$reflectedMethod->setAccessible(true);

调用您的私有(private)/ protected 方法:

$reflectedMethod->invokeArgs(    //use invoke method if you don't have parameters on your method
$mockedInstance,
[$param1, ..., $paramN]
);

关于phpunit - 如何对 protected 方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42094809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com