Tôi đang cố gắng thực hiện cuộc gọi đến phương thức cuối cùng ResourceBundle.getString()
. Với PowerMock 1.4.12 và EasyMock 3.1, cuộc gọi không bị nhạo báng; thay vào đó, phương thức "thực" được gọi.Mocking phương thức cuối cùng với PowerMock + EasyMock
lớp thử nghiệm của tôi:
@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);
}
...
}
Mã trong BeanBeingTested:
private ResourceBundle messages;
...
String label = messages.getString(BundleConstants.QUEUE);
Thông báo lỗi:
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)
Khi tôi bước qua trường hợp kiểm tra, trình gỡ lỗi cho thấy các loại beanBeingTested.messages
là "EasyMock cho lớp java.util.ResourceBundle", vì vậy, mô phỏng được chèn vào đúng ectly. (Ngoài ra, không có lỗi khi gọi tới số getString()
trong cuộc gọi expect()
khi thiết lập).
Với một mô hình đơn giản thay vì một mô hình đẹp, tôi nhận được lỗi sau:
java.lang.AssertionError:
Unexpected method call handleGetObject("Queue"):
getString("Queue"): expected: 1, actual: 0
Bất kỳ ý tưởng những gì tôi đang làm sai?
Cảm ơn.
Tôi cũng đang đối mặt với cùng một vấn đề.Nhưng điều này vẫn không giúp được gì. Bạn đang đề cập đến phương pháp cuối cùng chỉ hoặc phương pháp tĩnh? – Siddharth
@Siddharth {{PowerMock.mockStaticNice()}} mô phỏng một phương thức tĩnh của một lớp, nhưng để phần còn lại của các phương thức không bị ảnh hưởng. Nếu chủ đề này không giúp bạn, bạn nên tạo một câu hỏi mới, bởi vì có vẻ như bạn đang gặp phải các vấn đề khác nhau. – Andy
Cảm ơn bạn đã trả lời @Andy. Nhưng chủ đề của chủ đề này nói về phương thức cuối cùng nhưng bạn đang nói về phương pháp tĩnh. Tui bỏ lỡ điều gì vậy? Vấn đề của tôi là có phương thức "public final void" mà tôi đang cố gắng giả lập và thử nghiệm đang gọi phương thức thực tế thay vì giả lập. Vấn đề trên có khác với vấn đề tôi đang nói không? Xin lỗi nếu tôi bị mất một số điểm. – Siddharth