J'essaie de lire une ligne de mon test unitaire à partir de core_config_table dans la base de données magento 2. Je sais que pour accomplir ce travail, j'ai lu ce lien . Je dois utiliser:
\Magento\Framework\App\Config\ScopeConfigInterface
par:
\Magento\Framework\TestFramework\Unit\Helper\ObjectManager
Voici mon code:
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);
}
}
Je peux obtenir tous les objets que je veux en utilisant testObject \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
mais chaque fois que je veux obtenir\Magento\Framework\App\Config\ScopeConfigInterface
Erreur fatale: impossible d'instancier l'interface Magento \ Framework \ App \ Config \ ScopeConf igInterface dans C: \ xampp \ htdocs \ magento \ vendor \ magento \ framework \ TestFramework \ Un it \ Helper \ ObjectManager.php sur la ligne 162
Réponses:
Je peux me tromper ici, mais je pense que pour les tests unitaires, vous n'avez pas à récupérer les valeurs de la base de données. Vous pouvez supposer que les implémentations de
\Magento\Framework\App\Config\ScopeConfigInterface
sont testées et fonctionnent correctement. Vous n'avez qu'à tester votre méthode qui utilisegetValue
depuis leScopeConfigInterface
.Par exemple, si vous avez une méthode comme celle-ci:
vous devez tester cette méthode uniquement et non si la valeur de la base de données est ce dont vous avez besoin.
et vous pouvez tester cela comme ceci:
Selon le nombre de dépendances qui doivent être injectées dans le constructeur, il se peut que vous n'ayez même pas à utiliser le gestionnaire d'unités ObjectManager de test unitaire, mais vous pouvez simplement instancier la classe testée directement à l'aide
new
.C'est plus simple et en tant que tel préférable pour les tests unitaires. La seule raison d'utiliser le gestionnaire d'objet de test unitaire est si un grand nombre de dépendances rend la manipulation de chacune manuellement trop lourde.
la source
getValue
retourne vrai->willReturn(true)
et un pour quandgetValue
retourne faux.->willReturn(false)
. De cette façon, vous testez votre module réel dans les deux cas, sans dépendre de ce que vous avez dans votre base de données.Je pense que vous devez utiliser la simulation pour cela, mais dans votre cas, cela nécessitera une refactorisation de votre module, en particulier le besoin d'une
Config
classe liée à votre module.Vous pouvez baser votre développement sur celui
app/code/Magento/Braintree/Test/Unit/Gateway/Config/ConfigTest.php
qui implémente quelque chose comme ceci:la source