From 22bc00bccd646a3439021038128a0636a890e8ff Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Tue, 3 Feb 2026 13:36:50 +0100 Subject: [PATCH] skip property fetch in CreateStubOverCreateMockArgRector --- .../Fixture/skip_property_fetch.php.inc | 21 +++++++++++++++++++ .../CreateStubOverCreateMockArgRector.php | 17 +++++++-------- 2 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 rules-tests/PHPUnit120/Rector/CallLike/CreateStubOverCreateMockArgRector/Fixture/skip_property_fetch.php.inc diff --git a/rules-tests/PHPUnit120/Rector/CallLike/CreateStubOverCreateMockArgRector/Fixture/skip_property_fetch.php.inc b/rules-tests/PHPUnit120/Rector/CallLike/CreateStubOverCreateMockArgRector/Fixture/skip_property_fetch.php.inc new file mode 100644 index 00000000..b1a3445a --- /dev/null +++ b/rules-tests/PHPUnit120/Rector/CallLike/CreateStubOverCreateMockArgRector/Fixture/skip_property_fetch.php.inc @@ -0,0 +1,21 @@ +item = $this->createMock(\stdClass::class); + } + + public function testUsedMock() + { + $this->item->expects($this->atLeastOnce())->method('someMethod')->willReturn(123); + } +} diff --git a/rules/PHPUnit120/Rector/CallLike/CreateStubOverCreateMockArgRector.php b/rules/PHPUnit120/Rector/CallLike/CreateStubOverCreateMockArgRector.php index 52284971..c9715ae8 100644 --- a/rules/PHPUnit120/Rector/CallLike/CreateStubOverCreateMockArgRector.php +++ b/rules/PHPUnit120/Rector/CallLike/CreateStubOverCreateMockArgRector.php @@ -4,6 +4,7 @@ namespace Rector\PHPUnit\PHPUnit120\Rector\CallLike; +use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node; use PhpParser\Node\ArrayItem; use PhpParser\Node\Expr; @@ -14,9 +15,7 @@ use PhpParser\Node\Identifier; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Expression; -use Rector\PHPStan\ScopeFetcher; use Rector\PHPUnit\CodeQuality\NodeAnalyser\MockObjectExprDetector; -use Rector\PHPUnit\Enum\PHPUnitClassName; use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -90,13 +89,7 @@ public function getNodeTypes(): array */ public function refactor(Node $node): MethodCall|StaticCall|New_|ArrayItem|ClassMethod|null { - $scope = ScopeFetcher::fetch($node); - if (! $scope->isInClass()) { - return null; - } - - $classReflection = $scope->getClassReflection(); - if (! $classReflection->is(PHPUnitClassName::TEST_CASE)) { + if (! $this->testsNodeAnalyzer->isInTestClass($node)) { return null; } @@ -165,6 +158,12 @@ private function refactorClassMethod(ClassMethod $classMethod): ?ClassMethod } $assign = $stmt->expr; + + // handled in another rule + if ($assign->var instanceof PropertyFetch) { + continue; + } + $createMockMethodCall = $this->matchCreateMockMethodCall($assign->expr); if (! $createMockMethodCall instanceof MethodCall) {