Maison 类库下载 PHP类库 初识 PHPunit stub 模拟返回数据

初识 PHPunit stub 模拟返回数据

Oct 09, 2016 am 11:12 AM

这是这段时间以来结合 PHPunit 文档和大牛们的讲解,想记录下自己学习到的知识,未来参考补充,完善学到的东西

   我们一般使用单测对公司业务里的代码进行测试,他会帮忙找到你的一个个小小的思考不够全面的地方。(虽然大牛说过开发可以先写单测再来写实现的代码,然而现在的我感觉离那个还是有好多距离来着)

 

  stub(桩件):

    “将对象替换为(可选地)返回配置好的返回值的测试替身的实践方法称为上桩(stubbing)”——这是官方文档给出的上桩解释

    现在倒回来看我才理解,怎么说呢?举个梨子。

====前提

    我想测试的是这样一个方法:switchClothes($username)  ----通过名字查询数据库,性别是1的,就返回裤子,是0的,就返回裙子;

<?php
        Class Switch{
            public function switchClothes($username){
                $database=new database();
                $gender=$databse->find("id=$username");
                if($gender==0){
                        return "裙子";
                }else{
                        return "裤子";
                }
            }
        }
Copier après la connexion

查询数据库我封装了一个Database类里面的: find()

====开始写测试

首先我需要测试的是switchClothes这个类,可是在这个类里我需要去通过实例化database这个类用select方法,查询数据库再来得到我到底是要裤子还是裙子。所以,,真的是太麻烦了,我只是单纯的想测测这个方法的逻辑好么,万一数据库挂了,万一这个username不存在,我难道还要专门去数据库创造这样一条数据么,太麻烦了也不够好。万一需要测试包含更新数据的方法,难道还要真的修改数据么?

stub就华丽丽降临了。妈妈再也不用担心我要去操作数据库,再也不担心接口不通神马的了。

1.png

我可以对这个类进行上桩。说通俗点,我觉得就是对这个类进行了一个模拟,做了一个假的database类;

    如上如 A=switchClothes B=database类 D=数据库 C=stub 的那个类

    本来应该是A调用B,B查询数据库的.

    但是C的存在就走了红色那条线,C不会去查数据库,C是被我掌控的,我可以指定里面的find()方法返回1或者0 至少在A看来它和B一样,反正会给我返回个0或者1来的。这就等于C 将A与B,D这个体系隔绝了开来,减少了耦合;

    然后,就可以开始构造我需要的C了。

    

<?php
use PHPUnit\Framework\TestCase;

class StubTest extends TestCase
{
    

    public function testStub()
    {
        // 为database类建立桩件。
        $stub = $this->getMockBuilder("database")//类名
                             ->setMethods(array(&#39;find&#39;)) //可以是多个方法
                              ->getMock();

        // 配置桩件。
        $stub->method(&#39;find&#39;)//想要设置返回值的方法
             ->willReturn(0);//设置返回值 

        // 现在调用 $stub->select() 将返回 &#39;裙子&#39;。
        $this->assertEquals(&#39;裙子&#39;, $stub->find());
    }
}
?>
Copier après la connexion

这就是C了。

 单测的时候,走红色那条路就行了。

 all


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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)