Estoy tratando de leer una fila en mi prueba unitaria de core_config_table en la base de datos magento 2. Sé que para lograr este trabajo, he leído este enlace . Tengo que usar:
\Magento\Framework\App\Config\ScopeConfigInterface
mediante:
\Magento\Framework\TestFramework\Unit\Helper\ObjectManager
Aquí está mi código:
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);
}
}
Puedo obtener todos los objetos que quiero usando testObject, \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
pero cada vez que quiero obtener\Magento\Framework\App\Config\ScopeConfigInterface
Error grave: no se puede crear una instancia de la interfaz Magento \ Framework \ App \ Config \ ScopeConf igInterface en C: \ xampp \ htdocs \ magento \ vendor \ magento \ framework \ TestFramework \ Un it \ Helper \ ObjectManager.php en la línea 162
Respuestas:
Puede que me equivoque aquí, pero creo que para las pruebas unitarias no tiene que recuperar valores de la base de datos. Puede suponer que las implementaciones de
\Magento\Framework\App\Config\ScopeConfigInterface
se prueban y funcionan correctamente. Solo tiene que probar su método que utilizagetValue
desdeScopeConfigInterface
.Por ejemplo, si tiene un método como este:
solo necesita probar ese método y no si el valor de la base de datos es lo que necesita.
y puedes probar eso así:
Dependiendo de la cantidad de dependencias que se deben inyectar en el constructor, es posible que ni siquiera tenga que usar el ObjectManager de prueba de unidad, sino que simplemente puede instanciar la clase bajo prueba directamente usando
new
.Esto es más simple y, como tal, preferible para pruebas unitarias. La única razón para usar el administrador de objetos de prueba unitaria es si una gran cantidad de dependencias hace que burlarse de cada una sea demasiado engorroso.
fuente
getValue
devuelve verdadero->willReturn(true)
y otro para cuandogetValue
devuelve falso.->willReturn(false)
. De esta manera, prueba su módulo real en ambos casos, sin depender de lo que tenga en su base de datos.Creo que debe usar simulacro para esto, pero en su caso requerirá una refactorización de su módulo, especialmente la necesidad de una
Config
clase relacionada con su módulo.Puede basar su desarrollo en lo
app/code/Magento/Braintree/Test/Unit/Gateway/Config/ConfigTest.php
que implementa algo como esto:fuente