Comments (3)
thanks a lot for the detailed explanations 💙
Glad I could help!
just out of curiosity: https://github.com/sebastianbergmann/phpunit/blob/10.5/src/Event/Value/TestSuite/TestSuiteBuilder.php#L34-L44 is indeed dead code, or does it have some side effect i am missing?
You have found dead code, thank you for that. It's now gone.
from phpunit.
A test method can be marked a belonging to one or more groups. In the context of the event system, information about which groups a test belongs to is made available using a MetadataCollection
object that can be accessed using the TestMethod::metadata()
method on the value object that represents a test. This value object is passed to all subscribers for events that are related to tests, for instance to subscribers of the Test\Prepared
event.
A collection of all TestMethod
objects representing all test methods scheduled for execution (ie. not filtered away, etc.) is passed to the TestSuite\Started
event for the top-level test suite.
If I understand your use case correctly, you want to run custom code before the first test is run contingent on whether there is at least a single test scheduled for execution that belongs to a specific group. The code shown below shows an example of a subscriber for the TestSuite\Started
event as well as how to query the groups of the tests in the test suite.
<?php declare(strict_types=1);
namespace PHPUnit\TestFixture\Issue5769;
use PHPUnit\Event\Code\TestMethod;
use PHPUnit\Event\TestSuite\Started;
use PHPUnit\Event\TestSuite\StartedSubscriber as TestSuiteStartedSubscriber;
use PHPUnit\Metadata\Group;
final class Subscriber implements TestSuiteStartedSubscriber
{
private bool $isTopLevel = true;
public function notify(Started $event): void
{
if (!$this->isTopLevel) {
return;
}
$this->isTopLevel = false;
$groups = [];
foreach ($event->testSuite()->tests() as $test) {
if (!$test->isTestMethod()) {
continue;
}
assert($test instanceof TestMethod);
foreach ($test->metadata()->isGroup() as $group) {
assert($group instanceof Group);
$groups[] = $group->groupName();
}
}
var_dump(array_unique($groups));
}
}
Does this help?
from phpunit.
thanks a lot for the detailed explanations 💙
indeed, that works perfectly. i was only looking in the Event namespace and saw nothing about groups there, did not realize its all done in Metadata.
the Started event does not have the test suite, i am using the ExecutionStarted: FriendsOfSymfony/FOSHttpCache#570
just out of curiosity: https://github.com/sebastianbergmann/phpunit/blob/10.5/src/Event/Value/TestSuite/TestSuiteBuilder.php#L34-L44 is indeed dead code, or does it have some side effect i am missing?
from phpunit.
Related Issues (20)
- `#[CoversTrait]` and `#[UsesTrait]` attributes
- Deprecate support for targeting traits with `#[CoversClass]` and `#[UsesClass]` attributes
- Remove support for targeting traits with `#[CoversClass]` and `#[UsesClass]` attributes
- `#[CoversMethod]` attribute is not considered for risky test check
- Newrelic causes error handlers loop to get stuck, tests run out of memory HOT 3
- Infinite recursion with test doubles in combination with a destructor HOT 6
- Reduce output of Constraint failure descriptions, when asserting against trivial data types
- `assertObjectNotEquals()` HOT 3
- Duplicate CI pipeline jobs HOT 2
- TestCase::createStubForIntersectionOfInterfaces returns a Stub without an expects() method, triggering an exception when calling ->method() HOT 3
- Calling `method()` on a test stub created using `createStubForIntersectionOfInterfaces()` throws an unexpected exception HOT 3
- Run code coverage without a phpunit.xml HOT 6
- [Question] returnCallback + willReturnOnConsecutiveCalls HOT 2
- Avoid abstract test warning HOT 3
- Too few arguments to function PHPUnit\Framework\TestCase::__construct(), 0 passed HOT 5
- Depends attribute and annotation only skip tests, but don't execute them on success HOT 2
- Test with dependencies and data provider fails HOT 3
- Testing a method in a Custom Extension class HOT 5
- Is it possible to remove final declaration HOT 2
- [DX] Massive deprecations when upgrading to 10.5.18 and 10.5.20 HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from phpunit.