1 回答
TA贡献1863条经验 获得超2个赞
我忽略了$this->myclassObject
在类级别进行定义的语法问题,因为我认为这是您创建此问题的错字。
我认为您有两个问题:
通过
null
在LoggerInterface的setMethods中进行指定,您将覆盖PHPUnit模拟类/接口的抽象/接口方法的能力,该方法告诉它不要模拟任何东西你们都禁用富构造和(作为变量名的标值引号)提供的构造ARGS
您还引用了$logger
不存在的内容。
我还建议在您的示例中,您根本不需要部分模拟Foo,因为此时您尚未模拟其任何功能。您可以简单地致电new Foo($this->logger)
。但是,我假设您的示例已精简,并且您确实需要部分模拟该类的其他部分,因此现在将其保留。
试试这个:
class FooTest extends TestCase
{
private $logger;
private $myclassObject;
protected function setUp()
{
$this->logger = $this->createMock('\Psr\Log\LoggerInterface');
$this->logger->expects($this->any())
->method('debug')
->willReturn('Message Logged');
$this->myclassObject = $this->getMockBuilder('\MyVendor\MyModule\Model\Foo')
->setConstructorArgs([$this->logger])
->getMock();
}
public function testBar()
{
$this->assertEquals($expected_result, $this->myclassObject->Bar());
}
}
- 1 回答
- 0 关注
- 144 浏览
添加回答
举报