Yes stateCheck is an object of the a class that implement IComponet and that class is not final.
I tried to mock ServiceLoader.load but I needed to retrun a mocked ServiceLoader object of that load() methos that is not yet posible.
ServiceLoader mockServiceLoader = mock(ServiceLoader.class);
PowerMockito.mockStatic(ServiceLoader.class);
when(ServiceLoader.load(IComponent.class)).thenReturn(mockServiceLoader);
IComponent mockComponent = mock(IComponent.class);
Iterator iterator = mock(Iterator.class);
when(mockServiceLoader.iterator()).thenReturn(iterator);
when(iterator.hasNext()).thenReturn(true).thenReturn(false);
when(iterator.next()).thenReturn(mockComponent);
doNothing().when(mockComponent).check(context);
Error is
org.mockito.exceptions.base.MockitoException:
Mockito cannot mock this class: class replica.java.util.ServiceLoader$$PowerMock0
Mockito can only mock visible & non-final classes.
If you're not sure why you're getting this error, please report to the mailing list.
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:100)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:58)
at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:138)