错误:对成员函数funcName的调用为null

时间:2019-07-07 08:41:33

标签: php

我正在将Codeception与wpbrowser一起使用来测试类,但是无法测试类的对象实例。

错误是在null上调用成员函数funcName(在代码接收CLI中以红色显示)。它仅在测试对象时发生。静态方法测试有效/通过。

谁知道这是什么原因?

class A {
  public function run() {
    return 'run fired';
  }

  public static function runStatic() {
    return 'run static';
  } 
}

$a = new A();


class AjaxResponderTest extends \Codeception\TestCase\WPTestCase {

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

    public function tearDown(): void {
        parent::tearDown();
    }

  public function testA() {
    global $a;
    $result = $a->run();

    // [Error] Call to a member function run() on null
    $this->assertEquals('run fired', $result);
  }

  public function testAStatic() {
    $this->assertEquals('run static', A::runStatic()); // test passes
  }
}

复制@Mike Foxtech的测试类,在控制台中出现以下错误:

1) AjaxResponderTest: A
 Test  tests/wpunit/AjaxResponderTest.php:testA

  [PHPUnit\Framework\Exception] array_merge(): Argument #1 is not an array  

#1  Codeception\Subscriber\ErrorHandler->errorHandler

---------
2) AjaxResponderTest: A static
 Test  tests/wpunit/AjaxResponderTest.php:testAStatic

  [PHPUnit\Framework\Exception] array_merge(): Argument #1 is not an array  

#1  Codeception\Subscriber\ErrorHandler->errorHandler

ERRORS!
Tests: 2, Assertions: 0, Errors: 2.

2 个答案:

答案 0 :(得分:1)

为什么要使用全局变量?是出于特定原因吗?通常最好避免使用全局变量。

无论如何,我对Codeception并不熟悉,但是很明显,在测试运行时,变量$ a没有值。 我将类实例化移动到setUp()函数,而不是在测试之外。

答案 1 :(得分:0)

尝试

location ~ \.php$ {
    [...]
    fastcgi_param HTTPS on;