MockitoImplementationManager.java
package com.github.jonasrutishauser.cdi.test.core.interceptor;
import java.util.HashMap;
import java.util.Map;
import org.jboss.weld.exceptions.IllegalStateException;
import org.mockito.Mockito;
import org.mockito.listeners.MockCreationListener;
import org.mockito.mock.MockCreationSettings;
import com.github.jonasrutishauser.cdi.test.api.TestInfo;
import com.github.jonasrutishauser.cdi.test.api.context.TestScoped;
import jakarta.annotation.PreDestroy;
import jakarta.annotation.Priority;
import jakarta.enterprise.context.Initialized;
import jakarta.enterprise.event.Observes;
import jakarta.enterprise.inject.Alternative;
@TestScoped
@Alternative
@Priority(0)
public class MockitoImplementationManager extends MockImplementationManager implements MockCreationListener {
private final Map<Class<?>, Object> mocks = new HashMap<>();
@Override
public void onMockCreated(Object mock, @SuppressWarnings("rawtypes") MockCreationSettings settings) {
Class<?> mockType = settings.getTypeToMock();
if (mocks.containsKey(mockType)) {
throw new IllegalStateException("mock " + mockType + " already defined");
}
mocks.put(mockType, mock);
}
@Override
public Object getMock(Class<?> type) {
return mocks.get(type);
}
void install(@Observes @Initialized(TestScoped.class) TestInfo event) {
Mockito.framework().addListener(this);
}
@PreDestroy
void uninstall() {
Mockito.framework().removeListener(this);
}
}