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);
}
}
答案 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以使其工作,因为我自己很少使用部分模拟。你必须检查文档或尝试自己。