我在尝试对Drupal项目运行PhpUnit测试时遇到此错误
TypeError:传递给Drupal\views\Plugin\views\HandlerBase::\uu construct()的参数1必须是数组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()
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”作为后缀。因此,它应该是简单的现场测试,而不是基本测试。如果你不能完全确定自己在做什么,我会推荐这本优秀的教程:非常感谢我不能提升自己,但声誉仍然很低。非常感谢我不能提升自己,但声誉仍然很低。