Maison > développement back-end > tutoriel php > Yii Framework Official Guide Series 38 - Définition d'états spécifiques (luminaires)

Yii Framework Official Guide Series 38 - Définition d'états spécifiques (luminaires)

黄舟
Libérer: 2023-03-05 18:36:01
original
1366 Les gens l'ont consulté



Les tests automatisés doivent être exécutés plusieurs fois afin de garantir que le processus de test est reproductible, nous voulons vraiment tester dans certains états connus. , nous appelons cet état État spécifique Par exemple, lors du test de la fonctionnalité de création d'article dans une application de blog, à chaque fois que nous effectuons le test, le tableau lié à l'article (par exemple. Post tableau , Comment table) doit être restaurée dans un état spécifique. La documentation PHPUnit contient une bonne description de la construction générale d'un état spécifique. Cette section présente principalement comment construire un état spécifique à une base de données comme l'exemple qui vient d'être décrit.

La définition de l'état spécifique de la base de données construite est probablement l'une des parties les plus chronophages du test des applications avec prise en charge du backend de base de données. Le composant d'application CBbFixtureManager introduit par Yii peut efficacement atténuer ce problème lors de la réalisation d'un ensemble de tests. fait essentiellement ce qui suit :

  • Avant que tous les tests ne soient exécutés, il réinitialise les données liées aux tests à un état connaissable

  • Avant un seul. test est exécuté, il réinitialise une table spécifique à un état connu

  • Lors de l'exécution d'une méthode de test, il fournit un moyen de fournir des données de ligne pour un état spécifique.

Veuillez utiliser le CDbFixtureManager que nous avons configuré dans la configuration de l'application comme suit.


return array(
    'components'=>array(
        'fixture'=>array(
            'class'=>'system.test.CDbFixtureManager',
        ),
    ),
);
Copier après la connexion

Ensuite, nous fournissons des données d'état spécifiques sous le répertoire protected/tests/fixtures Ce répertoire peut être spécifié comme un autre répertoire en configurant l'attribut CDbFixtureManager::basePath dans le fichier de configuration de l'application. Les données d'état spécifiques sont composées de plusieurs noms. une combinaison de fichiers PHP de fichiers d'état spécifiques. Chaque fichier d'état spécifique renvoie un tableau, représentant la ligne initiale d'une table de données spécifique. Le nom du fichier et le nom de la table sont les mêmes. 🎜> table Exemple dans un fichier nommé Post.Post.php


<?php
return array(
    &#39;sample1&#39;=>array(
        'title'=>'test post 1',
        'content'=>'test post content 1',
        'createTime'=>1230952187,
        'authorId'=>1,
    ),
    'sample2'=>array(
        'title'=>'test post 2',
        'content'=>'test post content 2',
        'createTime'=>1230952287,
        'authorId'=>1,
    ),
);
Copier après la connexion

Comme nous pouvons le voir, les retours ci-dessus deux données de ligne. Chaque ligne représente un tableau, la clé est le nom du champ de la table et la valeur est la valeur du champ correspondant. L'index de chaque ligne est une chaîne appelée

alias de ligne (par exemple : , simple1). Plus tard, lorsque nous écrirons le script de test, nous pourrons facilement appeler cette ligne de données via son alias. Nous présenterons cela en détail dans la section suivante simple2

Vous remarquerez peut-être cela. nous n'avons pas spécifié la valeur du champ

dans l'état spécifique ci-dessus. En effet, le champ id a été défini comme une clé primaire à incrémentation automatique, et sa valeur sera également automatiquement générée lorsque nous insérons de nouvelles données. .id

Lorsque CDbFixtureManager est référencé pour la première fois, il vérifiera soigneusement tous les fichiers d'état spécifiques, puis les utilisera pour réinitialiser la table correspondante. Il efface la table, réinitialise la valeur de séquence d'auto-incrémentation de la table. clé primaire, puis insère la valeur de Réinitialiser la table en insérant des lignes de données d'un fichier d'état spécifique dans la table.

Parfois, nous ne souhaitons pas réinitialiser chaque table décrite dans un fichier d'état spécifique avant un ensemble de tests, car la réinitialisation de trop de fichiers d'état spécifiques peut prendre beaucoup de temps. Dans ce cas, nous pouvons écrire un script PHP pour personnaliser ce processus d'initialisation. Ce script doit être enregistré dans le répertoire où le fichier d'état spécifique est stocké. , et nommé

. Lorsque CDbFixtureManager détecte cela. Si le script existe, il exécutera ce script au lieu de réinitialiser chaque table.init.php

Ce n'est pas grave si vous n'aimez pas utiliser la méthode par défaut pour réinitialiser la table. , par exemple : effacez la table puis insérez des données d'état spécifiques. Si tel est le cas, nous pouvons écrire un script d'initialisation pour le fichier d'état spécifique spécifié. Ce script doit être nommé le nom de la table

. Le fichier de script d'initialisation de la table .init.php est Post. Lorsque CDbFixtureManager trouve ce script, il exécutera ce script au lieu d'utiliser la méthode par défaut pour réinitialiser la table.Post.init.php

Conseil : Trop de fichiers spécifiques à un état prolongent considérablement la durée du test. Par conséquent, vous ne devez fournir que des fichiers d'état spécifiques pour les tables dont les données changeront pendant le test. Les tables qui servent de services de recherche ne changeront pas et ne nécessitent donc pas d'état spécifique. fichiers.

Dans les deux sections suivantes, nous parlerons d'apprendre à utiliser des états spécifiques gérés par CDbFixtureManager dans les tests unitaires et fonctionnels

Ce qui précède est le contenu de Yii. Framework Official Guide Series 38 - Définition d'états spécifiques (fixtures) Pour plus de contenu connexe, veuillez prêter attention à PHP Chinese Net (m.sbmmt.com) !


source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal