Parent call inside a try-catch block(which is always executed) isn't recognised.

Open
#187 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
45/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale
Tech stack
php
Domain
testing

Research direction

Start with PHPStan\Rules\PHPUnit\ShouldCallParentMethodsRule::hasParentClassCall and the shown tearDown() example, focusing on how the try-catch block is traversed. Done means the parent::tearDown() call inside the try-catch is recognised and the missing-call error is no longer reported.

Written by the indexing model from the issue text.

Description

So, I am overriding tearDown() and as the rule suggests i need to call the parent::teardown() inside it , the only problem here is that i want to call it from a try-catch block which phpstan-phpunit doesn't recognise as a valid call to the parent method.

/**

{@inheritdoc}
*/
protected function tearDown(): void {
  try {
    parent::tearDown();
  }
  catch (\Exception $exception) {
    if (!(get_class($exception) === get_class($this->expectedTearDownException) && $exception->getMessage() === 
    $this->expectedTearDownException->getMessage())) {
    throw $exception;
  }
}
}

phpstan doesn't have this bug i checked in independently https://phpstan.org/r/1a212fa2-3cba-4c82-80db-7c75a8346f50

The main issue seems to be in
$hasParentCall = $this->hasParentClassCall($node->getOriginalNode()->getStmts(), strtolower($methodName));

		if (!$hasParentCall) {
			return [
				RuleErrorBuilder::message(
					sprintf('Missing call to parent::%s() method.', $methodName)
				)->build(),
			];
		}

Mainly \PHPStan\Rules\PHPUnit\ShouldCallParentMethodsRule::hasParentClassCall

I think this lacks the logic to detect parent class calls inside a try-catch block.

Dominant language
PHP
Stars
544
Forks
58
Avg merge
2d 1h
Merged PRs (30d)
5

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from phpstan/phpstan-phpunit

All issues in phpstan/phpstan-phpunit

Similar issues

More PHP issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.