phpstan-phpunit icon indicating copy to clipboard operation
phpstan-phpunit copied to clipboard

Call to method PHPUnit\Framework\Assert::assertSame() with {int} and int will always evaluate to false.

Open teohhanhui opened this issue 5 years ago • 1 comments

Given this class:

<?php
declare(strict_types=1);

namespace ApiPlatform\Core\Identifier\Normalizer;

use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;

final class IntegerDenormalizer implements DenormalizerInterface
{
    public function denormalize($data, $class, $format = null, array $context = []): int
    {
        return (int) $data;
    }
}

And calling assertSame like this:

<?php

declare(strict_types=1);

namespace ApiPlatform\Core\Tests\Identifier\Normalizer;

use ApiPlatform\Core\Identifier\Normalizer\IntegerDenormalizer;
use PHPUnit\Framework\TestCase;

class IntegerDenormalizerTest extends TestCase
{
    public function testDenormalize()
    {
        $this->assertSame(2, (new IntegerDenormalizer())->denormalize('2', 'int'));
    }
}

Gives an error such as:

 ------ ----------------------------------------------------------------------------------------------------- 
  Line   tests/Identifier/Normalizer/IntegerDenormalizerTest.php                                              
 ------ ----------------------------------------------------------------------------------------------------- 
  26     Call to method PHPUnit\Framework\Assert::assertSame() with 2 and int will always evaluate to false.  
 ------ -----------------------------------------------------------------------------------------------------

teohhanhui avatar Feb 19 '20 15:02 teohhanhui

I ran into the same issue with assertSame()

use PHPUnit\Framework\TestCase;

final class Test extends TestCase
{
	public function test(): void
	{
		touch('/file');
		$handle = fopen('/file', 'rwb');
		self::assertSame(0, fwrite($handle, 'data'));
		self::assertSame('data', fread($handle, 2));
	}
}
Call to static method PHPUnit\Framework\Assert::assertSame() with 0 and int<0, max>|false will always evaluate to true.
Call to static method PHPUnit\Framework\Assert::assertSame() with 'data' and string|false will always evaluate to true.

mabar avatar Feb 15 '22 12:02 mabar