Saya mencoba membaca baris dalam pengujian unit saya dari core_config_table di database Magento 2. Saya tahu itu untuk menyelesaikan pekerjaan ini karena saya telah membaca tautan ini . Saya harus menggunakan:
\Magento\Framework\App\Config\ScopeConfigInterface
melalui:
\Magento\Framework\TestFramework\Unit\Helper\ObjectManager
Ini kode saya:
protected function setUp()
{
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
$this->scopeConfig = $objectManager->getObject('\Magento\Framework\App\Config\ScopeConfigInterface');
}
public function testgetImageCDNConfigValue()
{
$this->scopeConfig->getValue($this->path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
if ($this->scopeConfig == null) {
$this->assertFalse(true);
} else {
$this->assertTrue(true);
}
}
Saya bisa mendapatkan setiap objek yang saya inginkan dengan menggunakan testObject \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
tetapi setiap kali saya ingin mendapatkannya\Magento\Framework\App\Config\ScopeConfigInterface
Kesalahan fatal: Tidak dapat membuat instance antarmuka Magento \ Framework \ App \ Config \ ScopeConf igInterface di C: \ xampp \ htdocs \ magento \ vendor \ magento \ framework \ TestFramework \ Un it \ Helper \ ObjectManager.php on line 162
Jawaban:
Saya mungkin salah di sini, tapi saya pikir untuk pengujian unit Anda tidak harus mengambil nilai dari basis data. Anda dapat mengasumsikan bahwa implementasi
\Magento\Framework\App\Config\ScopeConfigInterface
diuji dan bekerja dengan benar. Anda hanya perlu menguji metode yang digunakangetValue
dariScopeConfigInterface
.Misalnya, jika Anda memiliki metode seperti ini:
Anda perlu menguji metode itu saja dan tidak jika nilai dari db adalah yang Anda butuhkan.
dan Anda dapat mengujinya seperti ini:
Bergantung pada jumlah dependensi yang harus disuntikkan ke dalam konstruktor, Anda mungkin bahkan tidak harus menggunakan ObjectManager uji unit, tetapi cukup instantiate kelas yang diuji secara langsung menggunakan
new
.Ini lebih sederhana dan karena itu lebih disukai untuk pengujian unit. Satu-satunya alasan untuk menggunakan manajer objek tes unit adalah jika sejumlah besar dependensi membuat mengejek masing-masing secara manual terlalu rumit.
sumber
getValue
mengembalikan true->willReturn(true)
dan satu untuk ketikagetValue
mengembalikan false.->willReturn(false)
. Dengan cara ini Anda menguji modul Anda yang sebenarnya dalam kedua kasus, tidak tergantung pada apa yang Anda miliki di db.Saya rasa Anda perlu menggunakan tiruan untuk ini tetapi dalam kasus Anda itu akan memerlukan beberapa refactoring modul Anda, terutama kebutuhan
Config
kelas yang terkait dengan modul Anda.Anda dapat mendasarkan pengembangan Anda pada
app/code/Magento/Braintree/Test/Unit/Gateway/Config/ConfigTest.php
yang mengimplementasikan sesuatu seperti ini:sumber