繁体   English   中英

PHP单元中的模拟接口

[英]Mocking Interfaces in PHP Unit

我不确定自己在做什么错。 我得到错误:

Configuration read from /vagrant/freya-component-pagebuilder/phpunit.xml

....E........

Time: 50 seconds, Memory: 83.25Mb

There was 1 error:

1) PageSectionTest::testBuildSectionsNotNull
Argument 3 passed to Freya\Component\PageBuilder\PageSection\PageSection::buildSections() must be an instance of Freya\Component\PageBuilder\FieldHandler\IFieldHandler, instance of Mock_IFieldHandler_4f9ceb0e given, called in /vagrant/freya-component
-pagebuilder/tests/PageSectionTest.php on line 58 and defined

/vagrant/freya-component-pagebuilder/Freya/Component/PageBuilder/PageSection/PageSection.php:24
/vagrant/freya-component-pagebuilder/tests/PageSectionTest.php:58
/usr/local/bin/vendor/phpunit/phpunit/src/TextUI/Command.php:151
/usr/local/bin/vendor/phpunit/phpunit/src/TextUI/Command.php:103

FAILURES!
Tests: 13, Assertions: 4, Errors: 1.

Generating code coverage report in HTML format ... done

我的意思是看起来很明显,但是我的测试是在模拟接口....

public function testBuildSectionsNotNull() {
    $stub = $this->getMockBuilder('IFieldHandler')
                 ->setMethods(array('getFields'))
                 ->getMock();

    $stub->method('getFields')
         ->with(111)
         ->willReturn(array('something' => 'something else'));

    $sections = $this->pageSectionClassInstance->buildSections($this->parentPage, 'child_pages', $stub, '_default_partial');
    $this->assertNotEmpty($section);
}

它知道这是存在的,因为:

use Freya\Component\PageBuilder\PageSection\PageSection;
use Freya\Component\PageBuilder\FieldHandler\IFieldHandler;
use Freya\Factory\Pattern;

class PageSectionTest extends WP_UnitTestCase { ... }

我试过模拟实现Interface的类,但是那也不起作用。 参数三是$stub 所以我的问题是: 为什么这行不通? 我在嘲笑一个接口...该类存在并且可以看到..

您需要将标准名称传递给$this->getMockBuilder() 在您的示例中,您需要传递字符串'Freya\\Component\\PageBuilder\\FieldHandler\\IFieldHandler'

如果您使用的是PHP 5.5或更高版本,则还可以使用::class魔术常数代替字符串。 在您的示例中,它将是IFieldHandler::class

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM