Próbuję wyśmiewać połączenie z ostateczną metodą ResourceBundle.getString()
. W przypadku PowerMock 1.4.12 i EasyMock 3.1 połączenie nie jest kpiną; zamiast tego wywoływana jest "prawdziwa" metoda.Kpiny z ostatniej metody z PowerMock + EasyMock
Moja klasa Test:
@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);
}
...
}
kod w BeanBeingTested:
private ResourceBundle messages;
...
String label = messages.getString(BundleConstants.QUEUE);
Komunikat o błędzie:
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)
Kiedy prześledzić przypadku testowego, debugger pokazuje typ beanBeingTested.messages
jako "EasyMock dla klasy java.util.ResourceBundle", więc fałszywa jest wstrzykiwana corr ectly. (Nie ma również błędu podczas połączenia z numerem getString()
w ramach połączenia expect()
podczas konfiguracji).
z prostym mock zamiast ładnej makiety, pojawia się następujący błąd:
java.lang.AssertionError:
Unexpected method call handleGetObject("Queue"):
getString("Queue"): expected: 1, actual: 0
Każdy pomysł co robię źle?
Dzięki.
Mam również do czynienia z tym samym problemem.Ale to nadal nie pomaga. Czy odnosisz się tylko do metod ostatecznych lub statycznych? – Siddharth
@Siddharth {{PowerMock.mockStaticNice()}} wyśmiewa jedną statyczną metodę klasy, pozostawiając resztę metod nietkniętą. Jeśli ten wątek Ci nie pomoże, powinieneś utworzyć nowe pytanie, ponieważ wydaje się, że masz inne problemy. – Andy
Dzięki za odpowiedź @Andy. Ale temat tego wątku mówi o ostatecznej metodzie, ale mówisz o metodzie statycznej. Czy czegoś brakuje? Moim problemem jest to, że istnieje "publiczna, ostateczna próżnia", którą próbuję sfałszować, a test wywołuje rzeczywistą metodę zamiast próbować. Czy powyższy problem różni się od tego, o którym mówię? Przepraszam, jeśli przegapiłem jakiś punkt. – Siddharth