¿Cómo burlarse de ResourceBundle.getString()?
En lugar de burlarse, puede crear una implementación ficticia de ResourceBundle y luego pasarla en .thenReturn(resourceBundle)
:
import java.util.ResourceBundle;
ResourceBundle dummyResourceBundle = new ResourceBundle() {
@Override
protected Object handleGetObject(String key) {
return "fake_translated_value";
}
@Override
public Enumeration<String> getKeys() {
return Collections.emptyEnumeration();
}
};
// Example usage
when(request.getResourceBundle(any(Locale.class))).thenReturn(dummyResourceBundle)
Si necesita las claves y los valores reales, deberá proporcionar una implementación para getKeys()
, p.ej. un hashmap para almacenamiento y búsqueda de claves.
Encontrará un ejemplo de solución a continuación:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ ResourceBundle.class })
public class ResourceBundleTest {
@Test
public void getStringByPowerMock() throws Exception {
ResourceBundle resourceBundle = PowerMockito.mock(ResourceBundle.class);
Mockito.when(resourceBundle.getString(Mockito.anyString())).thenReturn("Hello world....");
System.out.println(resourceBundle.getString("keyword"));
}
}