Eu estou tentando ler uma linha no meu teste de unidade de core_config_table no banco de dados magento 2. Eu sei que para realizar este trabalho, eu li este link . Eu tenho que usar:
\Magento\Framework\App\Config\ScopeConfigInterface
através:
\Magento\Framework\TestFramework\Unit\Helper\ObjectManager
Aqui está o meu 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);
}
}
Posso obter todos os objetos que eu quiser usando testObject, \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
mas sempre que eu quiser\Magento\Framework\App\Config\ScopeConfigInterface
Erro fatal: Não é possível instanciar a interface Magento \ Framework \ App \ Config \ ScopeConf igInterface em C: \ xampp \ htdocs \ magento \ vendor \ magento \ framework \ TestFramework \ Un it \ Helper \ ObjectManager.php na linha 162
Respostas:
Posso estar errado aqui, mas acho que, para testes de unidade, você não precisa recuperar valores do banco de dados. Você pode assumir que as implementações de
\Magento\Framework\App\Config\ScopeConfigInterface
são testadas e funcionam corretamente. Você só precisa testar seu método que usa agetValue
partir doScopeConfigInterface
.Por exemplo, se você tiver um método como este:
você precisa testar apenas esse método e não se o valor do banco de dados é o que você precisa.
e você pode testar isso assim:
Dependendo do número de dependências que precisam ser injetadas no construtor, talvez você nem precise usar o ObjectManager de teste de unidade, mas pode simplesmente instanciar diretamente a classe em teste usando
new
.Isso é mais simples e, como tal, preferível para testes de unidade. O único motivo para usar o gerenciador de objetos de teste de unidade é se um grande número de dependências torna a zombaria de cada uma delas manualmente muito complicada.
fonte
getValue
retorna true->willReturn(true)
e outro para quandogetValue
retorna false.->willReturn(false)
. Dessa forma, você testa seu módulo real nos dois casos, não dependendo do que você possui no seu banco de dados.Eu acho que você precisa usar mock para isso, mas no seu caso, será necessária alguma refatoração do seu módulo, especialmente a necessidade de uma
Config
classe relacionada ao seu módulo.Você pode basear seu desenvolvimento no
app/code/Magento/Braintree/Test/Unit/Gateway/Config/ConfigTest.php
que implementa algo como isto:fonte