Zum Hauptinhalt springen

Was ist Orchestra Testbench?

Orchestra Testbench ist ein Laravel-Test-Helper für die Paketentwicklung. Wenn Sie von Orchestra\Testbench\TestCase erben, können Sie ein Paket allein testen, so als säße es in einer Laravel-Anwendung. Auch die offizielle Laravel-Dokumentation zur Paketentwicklung empfiehlt Testbench für Pakettests.

Einrichtung

1

Testbench installieren

composer require --dev orchestra/testbench
2

Basis-TestCase anlegen

<?php

namespace Vendor\Package\Tests;

use Orchestra\Testbench\TestCase as BaseTestCase;
use Vendor\Package\PackageServiceProvider;

abstract class TestCase extends BaseTestCase
{
    /**
     * $app ist die von Testbench gestartete Laravel-Anwendungsinstanz.
     */
    protected function getPackageProviders($app): array
    {
        return [
            PackageServiceProvider::class,
        ];
    }
}
3

Bei Bedarf Konfiguration oder Aliase ergänzen

Über getPackageAliases() können Sie — analog zu den aliases in config/app.php — Facade-Aliase für den Testbetrieb registrieren.
protected function getPackageAliases($app): array
{
    return [
        'Package' => \Vendor\Package\Facades\Package::class,
    ];
}

protected function defineEnvironment($app): void
{
    // Testkonfiguration hier überschreiben
    $app['config']->set('package.enabled', true);
}

Grundlegender Aufbau von Tests

Prüfen Sie zunächst, ob der Service Provider geladen wird, die Facade wie erwartet arbeitet und die Konfiguration greift.
<?php

namespace Vendor\Package\Tests\Feature;

use Vendor\Package\Facades\Package;
use Vendor\Package\PackageServiceProvider;
use Vendor\Package\Tests\TestCase;

class PackageBootstrapTest extends TestCase
{
    public function test_service_provider_is_registered(): void
    {
        $this->assertTrue($this->app->providerIsLoaded(PackageServiceProvider::class));
    }

    public function test_facade_returns_expected_value(): void
    {
        // Funktion über die Facade prüfen
        $this->assertSame('ok', Package::status());
    }

    public function test_package_config_is_available(): void
    {
        // Wert prüfen, der in defineEnvironment() gesetzt wurde
        $this->assertTrue(config('package.enabled'));
    }
}

Tests für Dateisystem und Datenbank

Für Tests mit Datenbank konfigurieren Sie in defineEnvironment() eine SQLite-In-Memory-Datenbank und laden die zu prüfenden Migrationen.
<?php

namespace Vendor\Package\Tests;

use Orchestra\Testbench\TestCase as BaseTestCase;

abstract class TestCase extends BaseTestCase
{
    protected function defineEnvironment($app): void
    {
        // SQLite-In-Memory-Datenbank verwenden
        $app['config']->set('database.default', 'testing');
        $app['config']->set('database.connections.testing', [
            'driver' => 'sqlite',
            'database' => ':memory:',
            'prefix' => '',
        ]);
    }

    protected function setUp(): void
    {
        parent::setUp();

        // Migrationen des Pakets laden
        $this->loadMigrationsFrom(__DIR__.'/../database/migrations');
    }
}
public function test_it_persists_data(): void
{
    \DB::table('widgets')->insert(['name' => 'test']);

    $this->assertDatabaseHas('widgets', ['name' => 'test']);
}

Tests gegen mehrere Laravel-Versionen

Die Major-Version von Testbench entspricht der Major-Version von Laravel. Details finden Sie in der offiziellen Version Compatibility.
LaravelTestbench
12.x10.x
13.x11.x
Für die fortlaufende Prüfung gegen mehrere Versionen kombinieren Sie das mit einer GitHub-Actions-Matrix. Zur Entwurfsphilosophie siehe Versionskompatibilität von Paketen verwalten.
strategy:
  fail-fast: false
  matrix:
    php: [8.3, 8.4]
    laravel: ["^12.0", "^13.0"]
    include:
      - laravel: "^13.0"
        testbench: "^11.0"
      - laravel: "^12.0"
        testbench: "^10.0"

Fazit

Mit Testbench können Sie das Verhalten Ihres Pakets sehr nah am Produktivbetrieb prüfen, ohne eine Laravel-Anwendung manuell aufsetzen zu müssen. Wenn Sie Service-Provider-Registrierung, Konfiguration, Facades und Datenbank in Ihre Tests einbeziehen, lassen sich Post-Release-Fehler deutlich reduzieren.

Verwandte Seiten

Laravel-Paketentwicklung

Prüfen Sie die Grundlagen der Paketimplementierung rund um Service Provider.

Versionskompatibilität von Paketen verwalten

Prüfen Sie die Versionsstrategie für Laravel und Testbench sowie den Betrieb der CI-Matrix.
Zuletzt geändert am 13. Juli 2026