savinmikhail/enforce-aaa-pattern-rector

Rector rule to enforce the presence of 'arrange', 'act', 'assert' structure of phpunit tests

v0.1.5 2025-09-01 13:15 UTC

This package is auto-updated.

Last update: 2025-09-01 13:15:25 UTC


README

Scrutinizer Code Quality Code Coverage

EnforceAaaPatternRector

The EnforceAaaPatternRector rule helps maintain consistent Arrange–Act–Assert (AAA) structure in PHPUnit tests. It automatically annotates your test methods with // Arrange, // Act, and // Assert comments, improving readability and making the test structure explicit.

Example

 final class FooTest extends PHPUnit\Framework\TestCase
 {
     public function testFoo(): void
     {
-        $date = new DateTimeImmutable('2025-01-01');
-        $formatted = $date->format('Y-m-d');
-        $this->assertEquals('2025-01-01', $formatted);
+        // Arrange
+        $date = new DateTimeImmutable('2025-01-01');
+        // Act
+        $formatted = $date->format('Y-m-d');
+        // Assert
+        $this->assertEquals('2025-01-01', $formatted);
     }
 }

This feature works for:

  • Any PHPUnit test method containing at least one $this->assert*() call
  • Idempotent: existing comments are preserved
  • Safe: does not reorder statements, only annotates

Installation

You can install the package via Composer:

composer require --dev savinmikhail/enforce-aaa-pattern-rector

Usage

To enable the rule, add it to your Rector configuration (rector.php):

<?php

declare(strict_types=1);

use Rector\Config\RectorConfig;
use SavinMikhail\EnforceAaaPatternRector\EnforceAaaPatternRector;

return static function (RectorConfig $rectorConfig): void {
    $rectorConfig->rule(EnforceAaaPatternRector::class);
};

Tests as Documentation

The package includes PHPUnit-based Rector tests demonstrating the rule in action.

Check the tests/Fixture directory to see examples of AAA annotation in various scenarios.

Contributing

Contributions, feedback, and suggestions are welcome! Feel free to open issues or submit pull requests.