Estoy intentando simular una llamada al método final ResourceBundle.getString()
. Con PowerMock 1.4.12 y EasyMock 3.1, la llamada no se burla; en su lugar, se llama el método "real".Burlando de un método final con PowerMock + EasyMock
Mi clase de prueba:
@RunWith(PowerMockRunner.class)
@PrepareForTest(ResourceBundle.class)
public class TestSuite {
@Before
public void setUp() throws Exception {
ResourceBundle resourceBundleMock = PowerMock.createNiceMock(ResourceBundle.class);
expect(resourceBundleMock.getString(BundleConstants.QUEUE)).andReturn("Queue");
PowerMock.replay(resourceBundleMock);
beanBeingTested.setMessages(resourceBundleMock);
}
...
}
Código de BeanBeingTested:
private ResourceBundle messages;
...
String label = messages.getString(BundleConstants.QUEUE);
mensaje de error:
java.util.MissingResourceException: Can't find resource for bundle $java.util.ResourceBundle$$EnhancerByCGLIB$$e4a02557, key Queue
at java.util.ResourceBundle.getObject(ResourceBundle.java:384)
at java.util.ResourceBundle.getString(ResourceBundle.java:344)
at com.yoyodyne.BeanBeingTested.setUpMenus(BeanBeingTested.java:87)
Cuando me paso a través del caso de prueba, el depurador muestra el tipo de beanBeingTested.messages
como "EasyMock para la clase java.util.ResourceBundle", por lo que el simulador se inyecta corr ectly. (Además, no hay ningún error en la llamada al getString()
dentro de la llamada expect()
durante la configuración).
Con una maqueta normal en lugar de una bonita maqueta, me sale el siguiente error:
java.lang.AssertionError:
Unexpected method call handleGetObject("Queue"):
getString("Queue"): expected: 1, actual: 0
Alguna idea de lo que estoy haciendo mal?
Gracias.
También estoy enfrentando el mismo problema.Pero esto todavía no está ayudando. ¿Se refiere solo a métodos finales o métodos estáticos? – Siddharth
@Siddharth {{PowerMock.mockStaticNice()}} se burla de un método estático de una clase, pero deja el resto de los métodos intactos. Si este hilo no lo ayuda, debe crear una nueva pregunta, porque parece que tiene problemas diferentes. – Andy
Gracias por su respuesta @Andy. Pero el tema de este hilo habla sobre el método final, pero estás hablando de método estático. ¿Me estoy perdiendo de algo? Mi problema es que hay un método de "vacío final público" que estoy tratando de burlar y la prueba llama al método real en lugar de simular. ¿Es el tema anterior diferente del que estoy hablando? Lo siento si me perdí un punto. – Siddharth