加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Symfony2:如何测试配置节点的值和索引

发布时间:2020-12-13 13:30:03 所属栏目:PHP教程 来源:网络整理
导读:在Symfony2中,使用此类设置,如何测试Configuration类中定义的每个节点,以及它们的值是否已正确配置. 要测试的课程 # MyBundleDependencyInjectionConfiguration.phpclass Configuration implements ConfigurationInterface{ /** * {@inheritDoc} */ publi
在Symfony2中,使用此类设置,如何测试Configuration类中定义的每个节点,以及它们的值是否已正确配置.

要测试的课程

# MyBundleDependencyInjectionConfiguration.php

class Configuration implements ConfigurationInterface
{
    /**
     * {@inheritDoc}
     */
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $treeBuilder->root('my_bundle')
            ->children()
                ->scalarNode("scalar")->defaultValue("defaultValue")->end()
                ->arrayNode("arrayNode")
                    ->children()
                        ->scalarNode("val1")->defaultValue("defaultValue1")->end()
                        ->scalarNode("val2")->defaultValue("defaultValue2")->end()
                    ->end()
                ->end()
            ->end()
        ;

        return $treeBuilder;
    }
}

以下是我想要做的断言,在我的单元测试中:

我试图以节点的形式访问节点,但它似乎不起作用.此外,TreeBuilder似乎没有让我们将配置作为数组获取,除非它们由bundle扩展加载.

测试

# MyBundleTestsDependencyInjectionConfigurationTest.php

$configuration = $this->getConfiguration();
$treeBuilder   = $configuration->getConfigTreeBuilder();

$this->assertInstanceOf("SymfonyComponentConfigDefinitionBuilderTreeBuilder",$treeBuilder);

// How to access the treebuilder's nodes ?
$rootNode   = $treeBuilder["my_bundle"];
$scalarNode = $treeBuilder["scalar"];
$arrayNode  = $treeBuilder["arrayNode"];
$val1Node   = $arrayNode["val1"];
$val2Node   = $arrayNode["val2"];

$this->assertInstanceOf("Symfony...ArrayNodeDefinition",$rootNode);
$this->assertEquals("defaultValue",$scalarNode,"Test the default value of the node");
$this->assertEquals("defaultValue",$val1Node,$val2Node,"Test the default value of the node");
我发现了一个可以在 JMSSecurityBundle基础上运行的解决方案.

我没有测试配置,而是测试扩展,这将为配置增加覆盖范围.这样,我可以断言已设置默认配置.

例如,这个扩展.

#MyBundleDependencyInjectionMyBundleExtension
class MyBundleExtension extends Extension
{
    /**
     * {@inheritDoc}
     */
    public function load(array $configs,ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config        = $this->processConfiguration($configuration,$configs);

        $container->setParameter("crak_landing_frontend.scalar",$config["scalar"]);
        $container->setParameter("crak_landing_frontend.array_node",$config["array_node"]);

        $loader = new LoaderXmlFileLoader($container,new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.xml');
    }
}

可以测试如下:

#MyBundleTestsDependencyInjectionMyBundleExtensionTest
class MyBundleExtensionTest extends PHPUnit_Framework_TestCase
{
    /**
     * @var MyBundleExtension
     */
    private $extension;

    /**
     * Root name of the configuration
     *
     * @var string
     */
    private $root;

    public function setUp()
    {
        parent::setUp();

        $this->extension = $this->getExtension();
        $this->root      = "my_bundle";
    }

    public function testGetConfigWithDefaultValues()
    {
        $this->extension->load(array(),$container = $this->getContainer());

        $this->assertTrue($container->hasParameter($this->root . ".scalar"));
        $this->assertEquals("defaultValue",$container->getParameter($this->root . ".scalar"));

        $expected = array(
            "val1" => "defaultValue1","val2" => "defaultValue2",);
        $this->assertTrue($container->hasParameter($this->root . ".array_node"));
        $this->assertEquals($expected,$container->getParameter($this->root . ".array_node"));
    }

    public function testGetConfigWithOverrideValues()
    {
        $configs = array(
            "scalar"     => "scalarValue","array_node" => array(
                "val1" => "array_value_1","val2" => "array_value_2",),);

        $this->extension->load(array($configs),$container = $this->getContainer());

        $this->assertTrue($container->hasParameter($this->root . ".scalar"));
        $this->assertEquals("scalarValue",$container->getParameter($this->root . ".scalar"));

        $expected = array(
            "val1" => "array_value_1",$container->getParameter($this->root . ".array_node"));
    }

    /**
     * @return MyBundleExtension
     */
    protected function getExtension()
    {
        return new MyBundleExtension();
    }

    /**
     * @return ContainerBuilder
     */
    private function getContainer()
    {
        $container = new ContainerBuilder();

        return $container;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读