gpt4 book ai didi

java - 如何对采用 ModelAndView 作为参数的方法进行单元测试和模拟

转载 作者:行者123 更新时间:2023-11-30 03:09:59 27 4
gpt4 key购买 nike

我有一个名为

的 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类的方法?

最佳答案

我已经为你编写了一个单元测试。我正在使用MockitoModelAndView 创建模拟。无法模拟 ResourceBundle,因为 getString() 方法是 final。所以我使用 dummy implementation来操纵返回值。如果您有很多这样的测试,您应该更好地将 ResourceBundle 包装在一个自己的可模拟类中并传递它。但是等等...您不需要模拟或 stub 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"));
}

关于java - 如何对采用 ModelAndView 作为参数的方法进行单元测试和模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33797949/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com