phpunit静态调用方法中的方法
phpunit static called method in method
我有这个方法:
public function getLocale()
{
$languageId = $this->_user->language->id;
$page = Wire::getModule('myModule')->getPage($languageId);
$locale = $page->locale;
if (!!$locale) {
return $locale;
}
// fallback to browser's locale
$browserLocale = new SBD_Language();
$locale = $browserLocale->getLanguageLocale('_');
return $locale;
}
现在我想为它写一个测试,但是我得到了这个错误:
Trying to get property of non-object
这是由 Wire::getModule('myModule')
.
引起的
所以我想用 phpunit 覆盖 Wire::getModule
响应。我只是不知道该怎么做。
到目前为止,我已经在 class 上创建了一个模拟,其中放置了方法 getLocale
并且一切正常,但我如何告诉那个模拟 class 它实际上应该调用 Wire
class?
的模拟
您可以通过代理对静态方法的调用来模拟静态方法,这样
class StaticClass
{
static function myStaticFunction($param)
{
// do something with $param...
}
}
class ProxyClass
{
static function myStaticFunction($param)
{
StaticClass::myStaticFunction($param);
}
}
class Caller
{
// StaticClass::myStaticFunction($param);
(new ProxyClass())->myStaticFunction($param);
// the above would need injecting to mock correctly
}
class Test
{
$this->mockStaticClass = \Phake::mock(ProxyClass::class);
\Phake::verify($this->mockStaticClass)->myStaticMethod($param);
}
该示例是针对 Phake 的,但它应该以相同的方式与 PHPUnit 一起使用。
我有这个方法:
public function getLocale()
{
$languageId = $this->_user->language->id;
$page = Wire::getModule('myModule')->getPage($languageId);
$locale = $page->locale;
if (!!$locale) {
return $locale;
}
// fallback to browser's locale
$browserLocale = new SBD_Language();
$locale = $browserLocale->getLanguageLocale('_');
return $locale;
}
现在我想为它写一个测试,但是我得到了这个错误:
Trying to get property of non-object
这是由 Wire::getModule('myModule')
.
所以我想用 phpunit 覆盖 Wire::getModule
响应。我只是不知道该怎么做。
到目前为止,我已经在 class 上创建了一个模拟,其中放置了方法 getLocale
并且一切正常,但我如何告诉那个模拟 class 它实际上应该调用 Wire
class?
您可以通过代理对静态方法的调用来模拟静态方法,这样
class StaticClass
{
static function myStaticFunction($param)
{
// do something with $param...
}
}
class ProxyClass
{
static function myStaticFunction($param)
{
StaticClass::myStaticFunction($param);
}
}
class Caller
{
// StaticClass::myStaticFunction($param);
(new ProxyClass())->myStaticFunction($param);
// the above would need injecting to mock correctly
}
class Test
{
$this->mockStaticClass = \Phake::mock(ProxyClass::class);
\Phake::verify($this->mockStaticClass)->myStaticMethod($param);
}
该示例是针对 Phake 的,但它应该以相同的方式与 PHPUnit 一起使用。