gpt4 book ai didi

php - Silverstripe 4 单元测试出现 "Couldn' t find object”错误,如何解决?

转载 作者:行者123 更新时间:2023-12-05 07:30:51 25 4
gpt4 key购买 nike

Silverstripe 4 单元测试出现“找不到对象”错误,如何解决?

使用 silverstripe 4 单元测试时,我收到错误“找不到对象‘transaction1’”。谁能建议这里发生了什么?谢谢。

class CustomerCreditTransactionTest extends SapphireTest 
{



protected static $fixture_file = BASE_PATH.'/mysite/code/CustomerCreditTransactionTest.yml';


/**
* @var string
*/
protected $readingmode = null;
/**
* Default reading mode
*
* @var string
*/
protected $defaultMode = null;


public function setUp()
{
$this->readingmode = 'Original';
$this->defaultMode = 'Original';
}
public function tearDown()
{
MirroredData::SetCurrentReadingStage($this->readingmode);
MirroredData::SetDefaultWritingStage($this->defaultMode);
}


public function testCustomerName()
{
$obj = $this->objFromFixture(CustomerCreditTransaction::class, 'transaction1');

$this->assertEquals(
'John@gmail.com',
$obj->CustomerName(),
'customer name is : '.$obj->CustomerName()
);
}

}

最佳答案

您完全重载了 setUptearDown 方法。 SapphireTest 在这些方法中处理了您的装置的创建,以及设置配置 list 等。因为您已经重载了它,所以测试将不会运行。

改用它(注意还将它们更改为 protected 可见性以匹配父类):

protected function setUp()
{
parent::setUp();

$this->readingmode = 'Original';
$this->defaultMode = 'Original';
}

protected function tearDown()
{
MirroredData::SetCurrentReadingStage($this->readingmode);
MirroredData::SetDefaultWritingStage($this->defaultMode);

parent::tearDown();
}

我没有看到你的夹具文件中有什么,所以我假设它没问题,问题只是它没有加载。

另一个建议:fixture 文件也可以是相对文件路径,因此您可以只使用 protected static $fixture_file = 'CustomerCreditTransactionTest.yml'; 如果该文件与您的测试类存在于同一目录中(如果您的固定装置位于 mysite/code 中,那么我认为它不存在,您可以忽略此建议)。更改它不会影响您的测试,因为您拥有的很好,但它会使它变得不那么冗长。

关于php - Silverstripe 4 单元测试出现 "Couldn' t find object”错误,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52074064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com