Я пытаюсь прочитать строку в моем модульном тесте из core_config_table в базе данных magento 2. Я знаю, что для выполнения этой работы, как я прочитал эту ссылку . Я должен использовать:
\Magento\Framework\App\Config\ScopeConfigInterface
через:
\Magento\Framework\TestFramework\Unit\Helper\ObjectManager
Вот мой код:
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);
}
}
Я могу получить каждый объект, который хочу, используя testObject, \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
но всякий раз, когда я хочу получить\Magento\Framework\App\Config\ScopeConfigInterface
Неустранимая ошибка: невозможно создать экземпляр интерфейса Magento \ Framework \ App \ Config \ ScopeConf igInterface в C: \ xampp \ htdocs \ magento \ vendor \ magento \ framework \ TestFramework \ Un it \ Helper \ ObjectManager.php в строке 162
Ответы:
Я могу ошибаться, но я думаю, что для модульных тестов вам не нужно извлекать значения из базы данных. Вы можете предположить, что реализации
\Magento\Framework\App\Config\ScopeConfigInterface
проверены и работают должным образом. Вам нужно только проверить свой метод, который используетgetValue
изScopeConfigInterface
.Например, если у вас есть такой метод:
вам нужно протестировать только этот метод, а не, если вам нужно значение из БД.
и вы можете проверить это следующим образом:
В зависимости от количества зависимостей, которые должны быть внедрены в конструктор, вам может даже не понадобиться использовать модульный тест ObjectManager, но вы можете просто создать экземпляр тестируемого класса напрямую, используя
new
.Это проще и предпочтительнее для модульных тестов. Единственная причина использовать диспетчер объектов модульного теста - если большое количество зависимостей делает манипулирование каждой из них слишком громоздким.
источник
getValue
возвращает истину,->willReturn(true)
и один для когдаgetValue
возвращает ложь.->willReturn(false)
, Таким образом, вы проверяете свой фактический модуль в обоих случаях, независимо от того, что у вас есть в вашей базе данных.Я считаю, что вам нужно использовать mock для этого, но в вашем случае это потребует некоторого рефакторинга вашего модуля, особенно необходим
Config
класс, связанный с вашим модулем.Вы можете основывать свою разработку на том,
app/code/Magento/Braintree/Test/Unit/Gateway/Config/ConfigTest.php
что реализует что-то вроде этого:источник