recherche

Maison  >  Questions et réponses  >  le corps du texte

problèmes de tests unitaires phpunit

<?php 
namespace app\tests;

use PHPUnit\Framework\TestCase;
use GuzzleHttp\Client;

class UserTest extends TestCase
{
    private $client;

    public function setUp()
    {
        $this->client = new \GuzzleHttp\Client( [
            'base_uri' => 'http://z.slim.com',
            'http_errors' => false, 
        ]);
    }


    public function testUser()
    {
        $response = $this->client->get('/user/vilay');
        $this->assertEquals(200, $response->getStatusCode());
        $body = $response->getBody();
        $data = json_decode($body, true);
        $this->assertArrayHasKey('code', $data);
        $this->assertArrayHasKey('msg', $data);
        $this->assertArrayHasKey('data', $data);
        $this->assertEquals(0, $data['code']);
    }
}

Après avoir écrit le code de test, exécutez-le


php vendor/bin/phpunit app/tests/UserTest.php

Le test n'a pas été exécuté et le script phpunit a été généré directement


dir=$(d=${0%[/\]*}; cd "$d"; cd "../phpunit/phpunit" && pwd)

# See if we are running in Cygwin by checking for cygpath program
if command -v 'cygpath' >/dev/null 2>&1; then
    # Cygwin paths start with /cygdrive/ which will break windows PHP,
    # so we need to translate the dir path to windows format. However
    # we could be using cygwin PHP which does not require this, so we
    # test if the path to PHP starts with /cygdrive/ rather than /usr/bin
    if [[ $(which php) == /cygdrive/* ]]; then
        dir=$(cygpath -m "$dir");
    fi
fi

dir=$(echo $dir | sed 's/ /\ /g')
"${dir}/phpunit" "$@"

De plus, j'ai configuré le test unitaire dans la variable d'environnement système et exécuté le test


phpunit app/tests/UserTest.php

Besoin d'introduire autoload.php en tête du code


require_once 'vendor/autoload.php';

N'est-il pas possible de charger automatiquement

代言代言2747 Il y a quelques jours1102

répondre à tous(2)je répondrai

  • 大家讲道理

    大家讲道理2017-06-26 10:51:13

    Résolu, j'ai trouvé la solution moi-même après avoir été invité par les réponses données par les deux amis précédents

    La plupart des tutoriels trouvés en ligne sont exécutés à l'aide de commandes

    
    php vendor/bin/phpunit tests.php
    

    Cela peut être dû à des raisons de version. La version précédente était un fichier de script php, alors que ma version est "phpunit/phpunit": "^6.2"vendor/bin/phpunitun fichier de script shell (je ne connais pas les détails car je n'ai pas utilisé 5.x).

    La bonne façon de l'utiliser est de donner au fichier de script l'autorisation d'exécutable

    
    chmod a+x vendor/bin/phpunit
    chmod a+x vendor/phpunit/phpunit/phpunit
    

    Exécuter des tests

    
    sh vendor/bin/phpunit app/tests/UserTest.php
    

    La méthode de chargement automatique est implémentée. À l'aide du package de composants phpunit chargé par composer, il existe un phpunit.xml dans le répertoire racine du projet, où vous pouvez définir le chemin de chargement automatique

    <?xml version="1.0" encoding="UTF-8"?>
    <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/5.7/phpunit.xsd"
             bootstrap="vendor/autoload.php"
             backupGlobals="false"
             beStrictAboutOutputDuringTests="true"
             beStrictAboutTestsThatDoNotTestAnything="true"
             beStrictAboutTodoAnnotatedTests="true"
             verbose="true">
        <testsuite>
            <directory suffix="Test.php">tests</directory>
        </testsuite>
    
        <filter>
            <whitelist processUncoveredFilesFromWhitelist="true">
                <directory suffix=".php">src</directory>
            </whitelist>
        </filter>
    
        <logging>
            <log type="coverage-html" target="build/coverage/html" title="phpDox"
                 charset="UTF-8" highlight="true" lowUpperBound="60" highLowerBound="90"/>
        </logging>
    
    </phpunit>
    
    

    répondre
    0
  • 世界只因有你

    世界只因有你2017-06-26 10:51:13

    Vous pouvez écrire un fichier de test unitaire en dehors du framework et utiliser phpunit xxx.php pour le tester. De cette façon, vous saurez si phpunit est installé normalement et si la manière d'introduire autoload.php est incorrecte. Vérifiez-les un par un.

    répondre
    0
  • Annulerrépondre