phpstan / phpstan-phpunit

PHPUnit extensions and rules for PHPStan
MIT License
457 stars 46 forks source link

assertCount with remembered values causing false positives #208

Open janedbal opened 4 months ago

janedbal commented 4 months ago

Simplified reproducible example:

class AssertCountProblemTest extends TestCase
{

    /**
     * @var list<string>
     */
    private static array $database = [];

    public function testFoo(): void
    {
        self::assertCount(0, $this->getDataFromDatabase());

        self::editDataInDatabase();

        $newData = $this->getDataFromDatabase();
        self::assertCount(1, $newData); // error: Call to static method PHPUnit\Framework\Assert::assertCount() with 1 and array{} will always evaluate to false.
    }

    /**
     * @return list<string>
     */
    private function getDataFromDatabase(): array
    {
        return self::$database;
    }

    private static function editDataInDatabase(): void
    {
        self::$database[] = 'new data';
    }

}

This poped up while upgrading phpstan-phpunit from 1.3.15 to 1.4.0

janedbal commented 4 months ago

1.3.16 is the version where this breaks.