GithubHelp home page GithubHelp logo

Comments (3)

sebastianbergmann avatar sebastianbergmann commented on June 2, 2024 1

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.

sebastianbergmann avatar sebastianbergmann commented on June 2, 2024

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.

dbu avatar dbu commented on June 2, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.