> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Laravel-Pakete mit Orchestra Testbench testen

> Wie Sie mit Orchestra Testbench eine Testumgebung für Laravel-Pakete aufsetzen und Service Provider, Facades, Konfiguration und Datenbank prüfen.

## Was ist Orchestra Testbench?

[Orchestra Testbench](https://github.com/orchestral/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](/de/advanced/package-development) empfiehlt Testbench für Pakettests.

```mermaid theme={null}
flowchart TD
    A["PHPUnit / Pest"] --> B["Package TestCase<br>extends Orchestra\\Testbench\\TestCase"]
    B --> C["Service Provider über<br>getPackageProviders() registrieren"]
    C --> D["In-Memory-Laravel-Anwendung starten"]
    D --> E["Paketfunktionen prüfen"]
```

## Einrichtung

<Steps>
  <Step title="Testbench installieren">
    ```bash theme={null}
    composer require --dev orchestra/testbench
    ```
  </Step>

  <Step title="Basis-TestCase anlegen">
    ```php theme={null}
    <?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,
            ];
        }
    }
    ```
  </Step>

  <Step title="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.

    ```php theme={null}
    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);
    }
    ```
  </Step>
</Steps>

## 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 theme={null}
<?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 theme={null}
<?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');
    }
}
```

```php theme={null}
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](https://packages.tools/testbench).

| Laravel | Testbench |
| ------- | --------- |
| 12.x    | 10.x      |
| 13.x    | 11.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](/de/advanced/package-versioning).

```yaml theme={null}
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

<Columns cols={2}>
  <Card title="Laravel-Paketentwicklung" icon="box" href="/de/advanced/package-development">
    Prüfen Sie die Grundlagen der Paketimplementierung rund um Service Provider.
  </Card>

  <Card title="Versionskompatibilität von Paketen verwalten" icon="git-branch" href="/de/advanced/package-versioning">
    Prüfen Sie die Versionsstrategie für Laravel und Testbench sowie den Betrieb der CI-Matrix.
  </Card>
</Columns>


## Related topics

- [Paketentwicklung mit Testbench Workbench](/de/advanced/package-workbench.md)
- [Statische Analyse für Pakete (PHPStan / Larastan)](/de/advanced/package-static-analysis.md)
- [CHANGELOG und Release-Management für Pakete](/de/advanced/package-changelog.md)
- [GeneratorCommand — Eigene make:-Befehle implementieren](/de/advanced/generator-command.md)
- [Laravel-Paketentwicklung](/de/advanced/package-development.md)
