加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在Java中,如何使用ServiceLoader模拟加载的服务?

发布时间:2020-12-14 05:06:56 所属栏目:Java 来源:网络整理
导读:我有一个传统的 Java应用程序,它具有这样的代码 ServiceLoader.load(SomeInterface.class) 我想提供一个模拟实现SomeInterface的代码来使用.我使用mockito嘲笑框架. 不幸的是,我无法更改遗留代码,我不想静态添加任何东西(例如,添加到META-INF中). 有没有一个
我有一个传统的 Java应用程序,它具有这样的代码
ServiceLoader.load(SomeInterface.class)

我想提供一个模拟实现SomeInterface的代码来使用.我使用mockito嘲笑框架.

不幸的是,我无法更改遗留代码,我不想静态添加任何东西(例如,添加到META-INF中).

有没有一个简单的方法来做这个测试,即.在运行时的测试?

解决方法

您可以使用 PowerMockito以及Mockito来模拟静态方法:
@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));
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读