尝试在Drupal项目上运行PhpUnit测试时出现此错误

时间:2017-04-20 10:08:30

标签: php unit-testing testing drupal phpunit

TypeError:传递给Drupal \ views \ Plugin \ views \ HandlerBase :: __ construct()的参数1必须是数组phpunit

我的代码是:

use Drupal\views_simple_math_field\Plugin\views\field\SimpleMathField;

class BasicTest extends PHPUnit_Framework_TestCase
{
   public function test_proba()
   {
     $first = 25;
     $second = 5;
     $result = 13;
     $test = new SimpleMathField();
     $working = $test->plus($first,$second,$result);
     $this->assertEquals($result,$working);

 }
}

我认为错误在" $ test = new SimpleMathField();因为当我像这样运行它时,测试运行得很好:

<?php

use Drupal\views_simple_math_field\Plugin\views\field\SimpleMathField;

class BasicTest extends PHPUnit_Framework_TestCase
{
   public function test_proba()
   {
     $first = 25;
     $second = 5;
     $result = 13;
    $this->assertTrue(True);

 }
}

1 个答案:

答案 0 :(得分:0)

问题不在于您的测试,而在于您如何实例化该字段。通过一个抽象链,类扩展HandlerBase,链接的构造函数如下所示:

public function __construct(array $configuration, $plugin_id, $plugin_definition) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->is_handler = TRUE;
}

您可以尝试这样的事情:

new SimpleMathField(array(), 'test_id', 'test_definition');

如果需要将某些变量传递给__construct或由其初始化,您可能需要检查plus()方法。您还可以尝试一些称为部分模拟的方法,在此方法中禁用构造函数,但将测试的方法保留在测试中:

$partiallyMockedField = $this->getMockBuilder(SimpleMathField::class)
    ->disableOriginalConstructor()
    ->setMethods([])
    ->getMock();

您可能必须添加一些需要在数组中进行模拟的方法。这些内容将替换为您在典型模拟中使用expects()method()指定的内容。

免责声明:我不确定您是否必须将空数组或显式空值传递给setMethods以使其工作,因为我自己很少使用部分模拟。你必须检查文档或尝试自己。