Installation PHPUnit

Um PHPUnit verwenden zu können, muss man es logischerweise erst installieren. Dies funktioniert ganz einfach mittels Composer. PHPUnit muss in jedem Projekt neu installiert werden, da es mit einer globalen Funktion nicht funktioniert:

composer require phpunit/phpunit
1

Nun registrieren wir ein neues Namespace App/Test für das Verzeichnis "tests/".

"autoload-dev": {
  "psr-4": {
    "App

Test

": "tests"
  }
},
1
2
3
4
5
6
7
8
9

Weiterhin erstellen wir ein neues Composer script namens "test".

"scripts": {
  "test": "phpunit",
}
1
2
3

Um den neu angelegten Namespace nun zu registrieren, muss der Composer aktualisiert werden. composer update

build.xml

Nun fügen wir der build.xml zwei neue Tasks hinzu. Einmal der Task phpunit und einmal phpunit-coverage. Diese Tasks können auch anderst benannt werden.

<directory name="phpunit" description="Run unit tests with PHPUnit">
  <exec executable="${basedir}/vendor/bin/phpunit${ext}" searchpath="true" resolveexecutable="true" failonerror="true" taskname="phpunit">
    <arg value="--configuration" />
    <arg path="${basedir}/phpunit.xml" />
  </exec>
</directory>

<directory name="phpunit-coverage" description="Run unit tests with PHPUnit with coverage">
  <delete dir="${basedir}/build/coverage" />
  <mkdir dir="${basedir}/build/coverage" />
  <exec executable="${basedir}/vendor/bin/phpunit${ext}" searchpath="true" resolveexecutable="true" failonerror="true" taskname="phpunit-coverage">
    <arg value="--configuration" />
    <arg path="${basedir}/phpunit.xml" />
    <arg value="--coverage-clover" />
    <arg path="${basedir}/build/logs/clover.xml" />
    <arg value="--coverage-html" />
    <arg path="${basedir}/build/coverage" />
  </exec>
</directory>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

Doch nun wird dies noch nicht funktionieren, da die Datei phpunit.xml noch gar nicht existiert. Also erstelen wir auch diese:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="tests/bootstrap.php" colors="true" backupGlobals="false" backupStaticAttributes="false" syntaxCheck="false">
  <testsuites>
    <testsuite name="Tests">
      <directory suffix="Test.php">tests</directory>
    </testsuite>
  </testsuites>
  <filter>
    <whitelist processUncoveredFilesFromWhitelist="true">
      <directory suffix=".php">src</directory>
      <exclude>
        <directory>bin</directory>
        <directory>build</directory>
        <directory>docs</directory>
        <directory>public</directory>
        <directory>resources</directory>
        <directory>src/View</directory>
        <directory>tmp</directory>
        <directory>vendor</directory>
      </exclude>
    </whitelist>
  </filter>
</phpunit>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

File system

Nun erstellen wir einen neuen Unterordner namens "tests" und erstellen und diesem eine Datei namens bootstrap.php mit dem Inhalt

<?php

require_once _DIR_ . '/../config/bootstrap.php';
1
2
3

Test Klasse

Nun erstellen wir eine erste Testklasse. diese nennen wir der Einfach heit halber "ExampleTest.php" und legen sie ebenfalls im "tests" Ordner ab.

 <?php

 namespace App
Test;

 use PHPUnit
Framework
TestCase;

/**
 * ExampleTest
 */
 class ExampleTest extends TestCase
 {
    /**
     * Test create object.
     * 
     * @return void
     */
    public function testInstance()
    {
      $this->assertTrue(true);
    }
 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

Erster Test

Nun sind wir soweit, dass wir unseren ersten test ausführen können. composer test oder ant phpunit ant ohounit-coverage