如果我尝试将 a 转换String为 a java.util.Date,Java 编译器会捕获错误。那么为什么编译器不将以下内容标记为错误呢?
List<String> strList = new ArrayList<>();
Date d = (Date) strList;
Run Code Online (Sandbox Code Playgroud)
当然,JVMClassCastException在运行时抛出 a ,但编译器不会标记它。
行为与 javac 1.8.0_212 和 11.0.2 相同。
我正试图模拟对最终方法的调用ResourceBundle.getString().使用PowerMock 1.4.12和EasyMock 3.1,呼叫不会被嘲笑; 相反,调用"真实"方法.
我的考试班:
@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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
BeanBeingTested中的代码:
private ResourceBundle messages;
...
String label = messages.getString(BundleConstants.QUEUE);
Run Code Online (Sandbox Code Playgroud)
错误信息:
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)
Run Code Online (Sandbox Code Playgroud)
当我逐步完成测试用例时,调试器会显示类型beanBeingTested.messages为"EasyMock for class java.util.ResourceBundle",因此模拟正确注入.(此外,在设置期间呼叫getString()内的expect()呼叫没有错误).
使用简单的模拟而不是一个很好的模拟,我得到以下错误:
java.lang.AssertionError:
Unexpected method call handleGetObject("Queue"):
getString("Queue"): expected: 1, actual: 0
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
谢谢.