Maison > développement back-end > tutoriel php > Supplément 39 de la série de guides officiels du Yii Framework - Tests : tests unitaires

Supplément 39 de la série de guides officiels du Yii Framework - Tests : tests unitaires

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



Étant donné que le framework de test Yii est construit sur PHPUnit, il est recommandé de lire la documentation PHPUnit avant de comprendre comment écrire un test unitaire. Ci-dessous nous résumons brièvement les principes de base de l'écriture d'un test unitaire dans Yii :

  • Un test unitaire est écrit sous la forme de la classe XyzTest héritée de CTestCase ou CDbTestCase, où Xyz représente le test Par exemple, si nous voulons tester la classe Post, nous nommerons la classe de test PostTest en conséquence. La classe de base CTestCase est une classe de test unitaire générale, tandis que CDbTestCase ne convient que pour tester les classes de modèles AR. , nous pouvons partir de là. Toutes les méthodes sont héritées dans la classe. PHPUnit_Framework_TestCase是这两个类的父类

  • Les classes de tests unitaires sont enregistrées dans des fichiers PHP sous la forme de XyzTest.php Pour plus de commodité, les fichiers de tests unitaires sont généralement enregistrés dans

    .protected/tests/unit文件夹下

  • La classe test contient principalement une série de méthodes testAbc, où Abc est généralement la méthode de classe à tester
  • La méthode test contient généralement une série d'instructions d'assertion (par ex.
  • ,

    ), comme point d'arrêt pour vérifier le comportement de la classe cible assertTrueassertEquals

  • Ci-dessous, nous expliquons principalement comment écrire des tests unitaires pour les classes de modèles AR. héritera de CDbTestCase car il fournit une prise en charge du statut spécifique à la base de données, nous avons discuté en détail du statut spécifique à la base de données dans le chapitre précédent

Supposons que nous voulions tester la classe de modèle Comment dans le cas du blog, nous pouvons. créez d'abord une classe nommée CommentTest, puis enregistrez-la sous

 :

protected/tests/unit/CommentTest.php

Dans cette classe, nous spécifions la variable membre
class CommentTest extends CDbTestCase
{
    public $fixtures=array(
        'posts'=>'Post',
        'comments'=>'Comment',
    );

    ......
}
Copier après la connexion
comme un tableau contenant les appareils spécifiques à utiliser pour ce test . Ce tableau représente le mappage d'un nom d'état spécifique à une classe de modèle ou à un nom de table d'état spécifique (par exemple de

à fixtures. Notez que lors du mappage à un nom de table d'état spécifique, le nom de la table de données doit être préfixé). avec deux points (par exemple posts) pour le distinguer du mappage vers une classe de modèle. Lors de l'utilisation d'un nom de classe de modèle, la table correspondante sera traitée comme une table d'état spécifique. Comme nous l'avons décrit précédemment, une certaine table d'état sera réinitialisée à un état connu à chaque fois qu'une méthode de test est exécutée. Post <img src="https://img.php.cn/upload/article/000/000/194/d8454295409f69752ae1c667ca9e3c2e-0.gif" alt="Supplément 39 de la série de guides officiels du Yii Framework - Tests : tests unitaires" class="wp-smiley"> ostLes noms d'état spécifiques nous permettent d'accéder à des données d'état spécifiques de manière très pratique dans les méthodes de test. Le code suivant montre une utilisation typique :

// return all rows in the 'Comment' fixture table
$comments = $this->comments;
// return the row whose alias is 'sample1' in the `Post` fixture table
$post = $this->posts['sample1'];
// return the AR instance representing the 'sample1' fixture data row
$post = $this->posts('sample1');
Copier après la connexion
Remarque : <.> Si une déclaration d'état spécifique utilise son nom de table de données (par exemple

), alors la troisième méthode d'utilisation ci-dessus sera invalide car nous n'avons plus d'informations associées à la classe de modèle 'posts'=>'Supplément 39 de la série de guides officiels du Yii Framework - Tests : tests unitairesost'. Ensuite, nous devons écrire

. Le code est très simple et clair : nous insérons d'abord un commentaire à réviser ; puis nous vérifions ce commentaire de révision en récupérant les données de la base de données et enfin nous appelons la méthode d'approbation et réussissons la révision ;

testApprove方法在Comment模型类中测试approve方法Ce qui précède est le contenu du supplément 39 de la série de guides officiels du Yii Framework - Tests : tests unitaires Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !

public function testApprove()
{
    // insert a comment in pending status
    $comment=new Comment;
    $comment->setAttributes(array(
        &#39;content&#39;=>&#39;comment 1&#39;,
        &#39;status&#39;=>Comment::STATUS_PENDING,
        &#39;createTime&#39;=>time(),
        &#39;author&#39;=>&#39;me&#39;,
        &#39;email&#39;=>[email protected]&#39;,
        &#39;postId&#39;=>$this->posts[&#39;sample1&#39;][&#39;id&#39;],
    ),false);
    $this->assertTrue($comment->save(false));

    // verify the comment is in pending status
    $comment=Comment::model()->findByPk($comment->id);
    $this->assertTrue($comment instanceof Comment);
    $this->assertEquals(Comment::STATUS_PENDING,$comment->status);

    // call approve() and verify the comment is in approved status
    $comment->approve();
    $this->assertEquals(Comment::STATUS_APPROVED,$comment->status);
    $comment=Comment::model()->findByPk($comment->id);
    $this->assertEquals(Comment::STATUS_APPROVED,$comment->status);
}
Copier après la connexion


Étiquettes associées:
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