簡體   English   中英

在其他靜態方法中模擬靜態方法

[英]Mocking static method in other static method

我有一個小類,該類返回由位於我的類路徑中的message_xx.properties填充的Properties對象:

public class PropertiesUtils {

  public static Properties loadProperties(Locale locale) {
    try {
      ClassLoader loader = getClassLoader();
      Properties properties = new Properties();
      String filePath = "messages_" + locale.getLanguage().toLowerCase() + ".properties";
      InputStream is = loader.getResourceAsStream(filePath);
      properties.load(is);
      is.close();
      return properties;
    } catch (Exception e) {
      log.error("Error loading properties by locale "+locale, e);
      return null;
    }
  }

  public static ClassLoader getClassLoader(){
    return PropertiesUtils.class.getClassLoader();
  }
}

一切正常,但是我想為此創建單元測試。 我想模擬方法“ getClassLoader”以在我的junit測試上下文中返回一些想要的特定InputStream。

@RunWith(PowerMockRunner.class)
@PrepareForTest(value=PropertiesUtils.class)
public class PropertiesUtilsTest {

    @Mock
    private Locale zuluLocale;
    @Mock
    private Locale etruscanLocale;

    @Mock
    private ClassLoader mockClassLoader;

    @Before
    public void init(){

        Mockito.when(zuluLocale.getLanguage()).thenReturn("zulu");
        Mockito.when(etruscanLocale.getLanguage()).thenReturn("etruscan");

        Mockito.when(mockClassLoader.getResourceAsStream("messages_zulu.properties")).thenReturn(IOUtils.toInputStream("2=esal"));
        Mockito.when(mockClassLoader.getResourceAsStream("messages_etruscan.properties")).thenReturn(IOUtils.toInputStream("2=ezimbili"));

        PowerMockito.mockStatic(PropertiesUtils.class);
        PowerMockito.when(PropertiesUtils.getClassLoader()).thenReturn(mockClassLoader);
    }

    @After
    public void finalize(){
        zuluLocale = null;
        etruscanLocale = null;
    }

    @Test
    public void loadPropertiesTest(){
        Assert.assertNull(PropertiesUtils.loadProperties(new Locale("en")));
        Assert.assertNotNull(PropertiesUtils.loadProperties(zuluLocale));
        Assert.assertNotNull(PropertiesUtils.loadProperties(etruscanLocale));

        Assert.assertEquals("esal", PropertiesUtils.loadProperties(zuluLocale).getProperty("2"));
        Assert.assertEquals("ezimbili", PropertiesUtils.loadProperties(etruscanLocale).getProperty("2"));
    }
}

由於AssertionFailedError錯誤,該測試失敗:

Assert.assertNotNull(PropertiesUtils.loadProperties(zuluLocale));

好的,這是個假人,問題,我需要做的是:

PowerMockito.when(PropertiesUtils.loadProperties(zuluLocale)).thenCallRealMethod();
PowerMockito.when(PropertiesUtils.loadProperties(etruscanLocale)).thenCallRealMethod();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM