我有一个名为
的i18n属性文件MessagesBundle_en.properties
invalidresourceBundle = Default locale English
invalidUserName = UserName cannot be null or empty or blank string
我有一个名为ParameterVerify
的类来验证参数。
public class ParameterVerify {
public void verifyParameters(String userName, ModelAndView modelAndView, ResourceBundle resourceBundle) {
if (resourceBundle == null) {
resourceBundle = ResourceBundle.getBundle("MessagesBundle", Locale.ENGLISH);
}
if (!(verifyParameter(userName))) {
modelAndView.addObject("invalidUserName", resourceBundle.getString("invalidUserName"));
}
}
private boolean verifyParameter(final String parameter) {
if (!(StringUtils.isBlank(parameter))) {
return true;
} else {
return false;
}
}
}
如何测试和模拟类ParameterVerify的方法?
答案 0 :(得分:2)
我已经为你攻击了一个单元测试。我正在使用Mockito为ModelAndView
创建模拟。由于ResourceBundle
方法为getString()
,因此无法模拟final
。所以我使用dummy implementation来操纵返回值。如果你有很多这些测试,你最好将ResourceBundle
包装在一个可模拟的类中并传递它。但是等等......您不需要模拟或存根RessourceBundle
,因为您可以使用真实的.properties
文件并在此处传递null
。
我写这个测试只是为了让你了解它是如何工作的。
@Test
public void test() {
String userName = null; // should add message
ModelAndView modelAndView = Mockito.mock(ModelAndView.class);
ResourceBundle resourceBundle = new ResourceBundle() {
@Override
protected Object handleGetObject(String key) {
if ("invalidUserName".equals(key)) {
return "mocked_string";
}
return null;
}
@Override
public Enumeration<String> getKeys() {
return Collections.emptyEnumeration();
}
};
ParameterVerify parameterVerify = new ParameterVerify();
parameterVerify.verifyParameters(userName, modelAndView, resourceBundle);
Mockito.verify(modelAndView, Mockito.times(1)).addObject(Mockito.eq("invalidUserName"), Mockito.eq("mocked_string"));
}
最好使用真实的MessagesBundle_en.properties
文件作为测试资源:
@Test
public void test() {
String userName = null; // should add message
ModelAndView modelAndView = Mockito.mock(ModelAndView.class);
ResourceBundle resourceBundle = null;
ParameterVerify parameterVerify = new ParameterVerify();
parameterVerify.verifyParameters(userName, modelAndView, resourceBundle);
Mockito.verify(modelAndView, Mockito.times(1)).addObject(Mockito.eq("invalidUserName"), Mockito.eq("UserName cannot be null or empty or blank string"));
}