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