In Java, how to use serviceloader to simulate a loaded service?

I have a traditional Java application that has such code

ServiceLoader.load(SomeInterface.class)

I want to provide a code to simulate the implementation of someinterface I use mockito mockery framework

Unfortunately, I can't change the legacy code, and I don't want to add anything statically (for example, to meta - INF)

Is there a simple way to do this test, that is Test at run time?

Solution

You can use powermockito and mockito to simulate static methods:

@RunWith(PowerMockRunner.class)
@PrepareForTest(ServiceLoader.class)
public class PowerMockingStaticTest
{
    @Mock
    private ServiceLoader mockServiceLoader;

    @Before
    public void setUp()
    {
        powermockito.mockStatic(ServiceLoader.class);
        Mockito.when(ServiceLoader.load(Mockito.any(Class.class))).thenReturn(mockServiceLoader);
    }

    @Test
    public void test()
    {
        Assert.assertEquals(mockServiceLoader,ServiceLoader.load(Object.class));
    }
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>