Skip to content

Commit 5337285

Browse files
authored
Support tests using StrictMocking trait / extending our test case and using DisableReturnValueGenerationForTestDoubles (#67)
1 parent d6ac7ef commit 5337285

4 files changed

+58
-0
lines changed

src/Phpstan/Rule/ForbidLooseMock.php

+5
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use PHPStan\Analyser\Scope;
1313
use PHPStan\Rules\Rule;
1414
use PHPStan\Rules\RuleErrorBuilder;
15+
use PHPUnit\Framework\Attributes\DisableReturnValueGenerationForTestDoubles;
1516
use PHPUnit\Framework\TestCase;
1617

1718
/**
@@ -51,6 +52,10 @@ public function processNode(Node $node, Scope $scope): array
5152
return [];
5253
}
5354

55+
if ($reflection->getNativeReflection()->getAttributes(DisableReturnValueGenerationForTestDoubles::class) !== []) {
56+
return [];
57+
}
58+
5459
return [RuleErrorBuilder::message('Forbidden call to "createMock", use "createStrictMock" instead.')->build()];
5560
}
5661
}

tests/phpstan/Rule/ForbidLooseMockTest.php

+12
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,18 @@ public function does_not_report_test_using_disabling_of_return_value_generation_
6363
$this->analyse([__DIR__.'/../data/TestCaseWithAttributeTest.php'], []);
6464
}
6565

66+
#[Test]
67+
public function does_not_report_test_extending_our_test_case_using_disabling_of_return_value_generation_attribute(): void
68+
{
69+
$this->analyse([__DIR__.'/../data/OurTestCaseExtendingAndUsingAttributeTest.php'], []);
70+
}
71+
72+
#[Test]
73+
public function does_not_report_test_using_trait_and_using_disabling_of_return_value_generation_attribute(): void
74+
{
75+
$this->analyse([__DIR__.'/../data/OurTraitUsingAndUsingAttributeTest.php'], []);
76+
}
77+
6678
protected function getRule(): ForbidLooseMock
6779
{
6880
return new ForbidLooseMock();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tests\Phpstan\Lendable\PHPUnitExtensions\data;
6+
7+
use Lendable\PHPUnitExtensions\TestCase;
8+
use PHPUnit\Framework\Attributes\DisableReturnValueGenerationForTestDoubles;
9+
use PHPUnit\Framework\Attributes\Test;
10+
11+
#[DisableReturnValueGenerationForTestDoubles]
12+
class OurTestCaseExtendingAndUsingAttributeTest extends TestCase
13+
{
14+
#[Test]
15+
public function loose_mock(): void
16+
{
17+
$this->createMock(\ArrayAccess::class);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tests\Phpstan\Lendable\PHPUnitExtensions\data;
6+
7+
use Lendable\PHPUnitExtensions\StrictMocking;
8+
use PHPUnit\Framework\Attributes\DisableReturnValueGenerationForTestDoubles;
9+
use PHPUnit\Framework\Attributes\Test;
10+
use PHPUnit\Framework\TestCase;
11+
12+
#[DisableReturnValueGenerationForTestDoubles]
13+
class OurTraitUsingAndUsingAttributeTest extends TestCase
14+
{
15+
use StrictMocking;
16+
17+
#[Test]
18+
public function loose_mock(): void
19+
{
20+
$this->createMock(\ArrayAccess::class);
21+
}
22+
}

0 commit comments

Comments
 (0)