Plexus Testing

Library to help testing plexus components

Example usage

Test class

import javax.inject.Inject;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertNotNull;

@PlexusTest
class PlexusTestJavaxTest {

    @Inject
    private TestJavaxComponent testJavaxComponent;

    @Test
    void dependencyShouldBeInjected() {
        assertNotNull(testJavaxComponent);
        assertNotNull(testJavaxComponent.getTestComponent2());
    }
}

Customization of the Plexus Container

Test class can customize the Plexus Container used for testing by implementing the PlexusTestConfiguration. All methods have default empty implementations so you can implement only the ones you need.

import javax.inject.Inject;

import org.codehaus.plexus.PlexusContainer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertSame;

// MockitoExtension must be first
@ExtendWith(MockitoExtension.class)
@PlexusTest
class PlexusTestCustomizeTest implements PlexusTestConfiguration {

    @Mock
    private TestJavaxComponent2 mockComponent2;

    /*
    Customize the container configuration before it is used to create the container.

    Method has default empty implementation so not need to implement if not used.

    @Override
    public void customizeConfiguration(ContainerConfiguration containerConfiguration) {

    }
    */

    @Override
    public void customizeContainer(PlexusContainer container) {
        container.addComponent(mockComponent2, TestJavaxComponent2.class.getName());
    }

    @Inject
    private TestJavaxComponent testJavaxComponent;

    @Test
    void dependencyShouldBeInjected() {
        assertNotNull(testJavaxComponent);
        assertSame(testJavaxComponent.getTestComponent2(), mockComponent2);
    }
}

Used classes in test

import javax.inject.Inject;
import javax.inject.Named;

@Named
public class TestJavaxComponent {
    @Inject
    private TestJavaxComponent2 testJavaxComponent2;

    public TestJavaxComponent2 getTestComponent2() {
        return testJavaxComponent2;
    }
}
import javax.inject.Named;

@Named
public class TestJavaxComponent2 {}