diff --git a/rules-tests/CodeQuality/Rector/Class_/PreferPHPUnitSelfCallRector/Fixture/skip_different_object.php.inc b/rules-tests/CodeQuality/Rector/Class_/PreferPHPUnitSelfCallRector/Fixture/skip_different_object.php.inc new file mode 100644 index 00000000..bb30f748 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Class_/PreferPHPUnitSelfCallRector/Fixture/skip_different_object.php.inc @@ -0,0 +1,16 @@ +transport('webhook') + ->dispatched() + ->assertCount(1) + ->assertContains(SendWebhookMessage::class); + } +} diff --git a/rules-tests/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector/Fixture/skip_different_object.php.inc b/rules-tests/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector/Fixture/skip_different_object.php.inc new file mode 100644 index 00000000..b339b13b --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector/Fixture/skip_different_object.php.inc @@ -0,0 +1,13 @@ +execute()::createMock('stdClass'); + } +} diff --git a/rules/CodeQuality/NodeAnalyser/AssertMethodAnalyzer.php b/rules/CodeQuality/NodeAnalyser/AssertMethodAnalyzer.php index 7f597374..9d29a191 100644 --- a/rules/CodeQuality/NodeAnalyser/AssertMethodAnalyzer.php +++ b/rules/CodeQuality/NodeAnalyser/AssertMethodAnalyzer.php @@ -7,7 +7,9 @@ use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\StaticCall; use PHPStan\Reflection\ClassReflection; +use PHPStan\Type\ObjectType; use Rector\NodeNameResolver\NodeNameResolver; +use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\PHPUnit\CodeQuality\Enum\NonAssertStaticableMethods; use Rector\PHPUnit\Enum\PHPUnitClassName; use Rector\Reflection\ReflectionResolver; @@ -17,11 +19,20 @@ public function __construct( private NodeNameResolver $nodeNameResolver, private ReflectionResolver $reflectionResolver, + private NodeTypeResolver $nodeTypeResolver ) { } public function detectTestCaseCall(MethodCall|StaticCall $call): bool { + $objectCaller = $call instanceof MethodCall + ? $call->var + : $call->class; + + if (! $this->nodeTypeResolver->isObjectType($objectCaller, new ObjectType('PHPUnit\Framework\TestCase'))) { + return false; + } + $methodName = $this->nodeNameResolver->getName($call->name); if (! str_starts_with((string) $methodName, 'assert') && ! in_array( $methodName,