Testing Multiproject

NOTE

Note: This example improves the cookbook for multi-project testing.

Your Mojo should have aggregator parameter set to true - Maven Plugin Tools Java Annotations

@Mojo(name = "touch", aggregator = true)
public class MyMojo extends AbstractMojo {
  ...
}

To test a Mojo in a multiproject area, you need to define several stubs, i.e. for the main test project and its modules.

Configure Mian project and create Stubs for the sub projects

import org.apache.maven.api.plugin.testing.MojoTest;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.mockito.Mockito;

@MojoTest
class AggregateTest {

    @Inject
    private MavenProject project;

    @Inject
    private MavenSession session;

    @BeforeEach
    void setup() {
        // Configure the main project as execution root
        project.setExecutionRoot(true);

        MavenProject stub1 = new MavenProject();
        // configure stub1 as needed

        MavenProject stub2 = new MavenProject();
        // configure stub2 as needed

        // return all projects in the reactor - reactorProjects
        Mockito.when(session.getProjects()).thenReturn(Arrays.asList(project, stub1, stub2));
    }

    @Test
    @Basedir("/unit/aggregate-test")
    @InjectMojo(goal = "aggregate")
    void aggregate(AggregatorMojo mojo) throws Exception {

        mojo.execute();

        // Verify behavior across all projects
    }
}