簡體   English   中英

Silverstripe 4單元測試中出現“找不到對象”錯誤,如何解決?

[英]“Couldn't find object” error with Silverstripe 4 unit testing, how to fixed it?

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處理夾具創建以及設置配置清單等的地方。因為您已經超載了它,所以測試將無法運行。

請改用此方法(請注意,也將它們更改為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那么我認為它不存在,那么您可以忽略此建議)。 更改此設置不會影響您的測試,因為您所擁有的還可以,但是會使它的詳細程度降低一些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM