我在尝试对Drupal项目运行PhpUnit测试时遇到此错误

我在尝试对Drupal项目运行PhpUnit测试时遇到此错误,php,unit-testing,testing,drupal,phpunit,Php,Unit Testing,Testing,Drupal,Phpunit,TypeError:传递给Drupal\views\Plugin\views\HandlerBase::\uu construct()的参数1必须是数组phpunit的类型 我的代码是: use Drupal\views_simple_math_field\Plugin\views\field\SimpleMathField; class BasicTest extends PHPUnit_Framework_TestCase { public function test_proba()

TypeError:传递给Drupal\views\Plugin\views\HandlerBase::\uu 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);

 }
}
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');

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

<?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);

 }
}
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');
您可以尝试以下方法:

<?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);

 }
}
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');
如果其中需要传递给_构造或由其初始化的某些变量,您可能必须在
plus()
方法中进行检查。您也可以尝试称为部分模拟的方法,在该方法中禁用构造函数,但将被测方法保留在测试中:

$partiallyMockedField = $this->getMockBuilder(SimpleMathField::class)
    ->disableOriginalConstructor()
    ->setMethods([])
    ->getMock();
您可能需要在数组中添加一些需要模拟的方法。这些方法将替换为在典型模拟中使用
expects()
method()
指定的任何方法


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

问题不在于您的测试,而在于您如何实例化字段。通过一个抽象链,类扩展和构造函数链接ed看起来像这样:

<?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);

 }
}
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');
您可以尝试以下方法:

<?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);

 }
}
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');
如果其中需要传递给_构造或由其初始化的某些变量,您可能必须在
plus()
方法中进行检查。您也可以尝试称为部分模拟的方法,在该方法中禁用构造函数,但将被测方法保留在测试中:

$partiallyMockedField = $this->getMockBuilder(SimpleMathField::class)
    ->disableOriginalConstructor()
    ->setMethods([])
    ->getMock();
您可能需要在数组中添加一些需要模拟的方法。这些方法将替换为在典型模拟中使用
expects()
method()
指定的任何方法


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

您正在测试名为Basic的类吗?我正在测试plus()SimpleMathFIeld类中的函数,该类位于具有Drupal\views\u simple\u math\u field\Plugin\views\field\namespace的外部PHP文件中。测试类的名称应以“test”作为后缀所以它应该是简单的现场测试而不是基本测试。如果你不能完全确定自己在做什么,我推荐这本优秀的教程:你正在测试一个名为Basic的类吗?我正在测试SimpleMathFIeld类中的一个plus()函数,该类位于外部PHP文件中,该文件具有Drupal\views\u simple\u math\u field\Plugin\views\field\namespace。测试类的名称应以“test”作为后缀。因此,它应该是简单的现场测试,而不是基本测试。如果你不能完全确定自己在做什么,我会推荐这本优秀的教程:非常感谢我不能提升自己,但声誉仍然很低。非常感谢我不能提升自己,但声誉仍然很低。