如何匹配字符串..使用 Mockito 和 PowerMock



我最近正在学习Mockito和PowerMock。

我遇到了以下问题

    //This method belongs to the Messages class
    public static String get(Locale locale, String key, String... args) {
        return MessageSupplier.getMessage(locale, key, args);
    }
    //the new class
    @RunWith(PowerMockRunner.class)
    @PowerMockIgnore( {"javax.management.*"})
    @PrepareForTest({Messages.class, LocaleContextHolder.class})
    public class DiscreT {
        @Test
        public void foo() {
            PowerMockito.mockStatic(LocaleContextHolder.class);
            when(LocaleContextHolder.getLocale()).thenReturn(Locale.ENGLISH);
            PowerMockito.mockStatic(Messages.class);
            when(Messages.get(Mockito.any(Locale.class),Mockito.anyString(), Mockito.any(String[].class)))
                    .thenReturn("123156458");
            System.out.print(Messages.get(LocaleContextHolder.getLocale(), "p1"));
            System.out.print(Messages.get(LocaleContextHolder.getLocale(), "p1", "p2"));
        }
    }

结果 :空123156458

为什么? 以及如何匹配字符串...

在第一个 System.out.print 语句中,您对 Messages.get 方法使用了 2 个参数。这是您尚未模拟的方法重载之一。这就是它返回 null 的原因。请注意,默认情况下,尚未模拟其行为的对象模拟将返回 null。

如果您希望它工作,您还必须模拟Messages.get(Locale, String)方法

when(Messages.get(Mockito.any(Locale.class),Mockito.anyString()))
                    .thenReturn("123156458");

请记住,您嘲笑了接受最多参数的方法这一事实并不意味着 Mockito 理解并嘲笑其余的重载!你也必须嘲笑他们。

我所知,没有办法模拟一个方法一次并自动模拟它的所有重载,但是,有一种方法可以创建一个模拟对象并为其所有方法配置默认响应。退房 http://www.baeldung.com/mockito-mock-methods#answer

相关内容

  • 没有找到相关文章

最新更新