在setUp()中初始化的PHPUnit对象在第一次测试后变为null

在setUp()中初始化的PHPUnit对象在第一次测试后变为null,phpunit,Phpunit,我是PHPunit新手,在通过示例类学习PHPunit的同时,我发现了一个错误。错误在于,在setUp()中初始化的对象$this->sysman在执行第一次测试后变为空。下面是我正在尝试的代码。请告诉我这里出了什么错。谢谢 class PersonTest extends TestCase { /** @var SysManService $sysman */ protected $sysman; protected $personModel; public function setUp(

我是PHPunit新手,在通过示例类学习PHPunit的同时,我发现了一个错误。错误在于,在
setUp()
中初始化的对象
$this->sysman
在执行第一次测试后变为空。下面是我正在尝试的代码。请告诉我这里出了什么错。谢谢

class PersonTest extends TestCase {

/** @var SysManService $sysman */
protected $sysman;
protected $personModel;

public function setUp(){
    /** @var Adapter $adapter */
    $adapter = $this->prophesize(Adapter::class)->reveal();

    /** @var LoggerService $logger */
    $logger = $this->prophesize(LoggerService::class)->reveal();

    /** @var  ContainerInterface $container */
    $container = $this->prophesize(ContainerInterface::class);
    $config = (array)$container->get('config');

    $this->sysman = new SysManService($adapter, $logger, $config);
    //$sysman = new SysManService($adapter, $logger, $config);

    $this->personModel = new Person($this->sysman);
  }

protected function tearDown(){ }

public function testPropertyUserNameExists() {
    $this->assertObjectHasAttribute('userName', $this->personModel);
}

public function testPropertyPasswordExists() {
    $this->assertObjectHasAttribute('password', $this->personModel);
}}

错误到底说明了什么?哪个对象是空的?
setUp
函数的思想是它在每次测试之前运行。因此,即使其中一个测试将对象设置为
null
,第二个测试也应该以新的运行开始。另外,您正在模拟容器,然后对其调用
get
函数。这是无用的,因为在这种情况下,它总是返回
null
。这意味着您的
$config
是一个空数组。您还在单元测试中初始化了2个对象,我不推荐这样做。如果这是对Person对象的测试,只需继续测试,并只模拟Sysman对象。感谢您的输入。传递给
人员的
$this->sysman
在第一次测试后变为空。所以第二次测试失败了。我正在通过容器获取
$config
的数据。它很好,即使它是空的。但我不明白为什么
$this->sysman
变为空。另外,请建议我如何根据您的最后两个声明进行更改。我正在初始化哪2个对象?您正在创建一个新的sysManService实例。您只需执行
$this->sysman=$this->PropherSize(SysManService::class)
。这样,您就不必模拟适配器、记录器和容器/配置。我不确定这是否也能解决对象变为null的问题,它首先不应该这样做。但这是一个很好的起点。我尝试了,但在对象类型方面出现了另一个错误。错误是
参数1传递给Testbed\Model\Person::\uu construct()必须是App\Service\SysManService的实例,Prophecy\Prophecy\MethodProphecy的实例给定
错误具体说明了什么?哪个对象是空的?
setUp
函数的思想是它在每次测试之前运行。因此,即使其中一个测试将对象设置为
null
,第二个测试也应该以新的运行开始。另外,您正在模拟容器,然后对其调用
get
函数。这是无用的,因为在这种情况下,它总是返回
null
。这意味着您的
$config
是一个空数组。您还在单元测试中初始化了2个对象,我不推荐这样做。如果这是对Person对象的测试,只需继续测试,并只模拟Sysman对象。感谢您的输入。传递给
人员的
$this->sysman
在第一次测试后变为空。所以第二次测试失败了。我正在通过容器获取
$config
的数据。它很好,即使它是空的。但我不明白为什么
$this->sysman
变为空。另外,请建议我如何根据您的最后两个声明进行更改。我正在初始化哪2个对象?您正在创建一个新的sysManService实例。您只需执行
$this->sysman=$this->PropherSize(SysManService::class)
。这样,您就不必模拟适配器、记录器和容器/配置。我不确定这是否也能解决对象变为null的问题,它首先不应该这样做。但这是一个很好的起点。我尝试了,但在对象类型方面出现了另一个错误。错误是
参数1传递给Testbed\Model\Person::\uu construct()必须是App\Service\SysManService的实例,Prophecy\Prophecy\MethodProphecy的实例