首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟Locale.forLanguageTag

模拟Locale.forLanguageTag
EN

Stack Overflow用户
提问于 2014-01-21 20:28:59
回答 1查看 3.1K关注 0票数 0

我正在尝试对一个方法进行单元测试,该方法

代码语言:javascript
复制
public static Context fromLanguageTag(final String languageTag) {
    final Context context = new Context();
    final Locale locale = Locale.forLanguageTag(languageTag);
    context.language = locale.getLanguage().length()==3 ? locale.getLanguage() : locale.getISO3Language();
    return context;
}

为了测试我是否需要模拟java.util.Locale。我使用的是PowerMock和Mockito:

代码语言:javascript
复制
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Locale.class })
public class ContextTest {  
    public void testFromLanguageTag() throws Exception {
       mockStatic(Locale.class);
       final Locale mockLocale = mock(Locale.class);
       when(mockLocale.getLanguage()).thenReturn(LANGUAGE_3_OUTPUT);
       when(mockLocale.getISO3Language()).thenReturn(LANGUAGE_ISO);
       when(Locale.forLanguageTag(Mockito.eq(LANGUAGE_TAG_LONG_INPUT))).thenReturn(mockLocale);
       final Context c = Context.fromLanguageTag(LANGUAGE_TAG_LONG_INPUT);
       assertThat(c.getLanguage()).isEqualTo(LANGUAGE_3_OUTPUT);
   }
}

但似乎从未调用过来自mockLocale的模拟方法调用;相反,我从java.util.Locale.getISO3Language获得了一个java.util.MissingResourceException (我想模拟它)。如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2014-01-21 20:53:05

一种方法(忽略当前错误的原因)是将Locale对象包装在可以正确模拟的外观中。然后这个对象可以作为字段/构造函数参数传入到您的类中。

例如。

代码语言:javascript
复制
public interface LocaleResolver {    
  // add signatures for the methods you care about in Locale (only)
}

public class PlatformLocaleResolver implements LocaleResolver {
  // delegate all methods to the corresponding `Locale` methods
}

public class Context {
  // take LocaleResolver in constructor
  // (or, if preferred, expose a setter to adjust a class field)
}

然后,在测试用例中,您可以在构造Context对象之前模拟LocalResolver

我总是更喜欢这样的方法,而不是试图模拟具体的类。它的好处往往超出了测试的简单性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21258179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档