gpt4 book ai didi

java - Mockito when().thenReturn 不起作用

转载 作者:行者123 更新时间:2023-12-02 06:42:44 31 4
gpt4 key购买 nike

我正在尝试为我的 Spring Controller 编写测试,但遇到了问题。以下代码始终返回 redirect:/welcome 尽管我有 when(result.hasErrors()).thenReturn(true); 应该返回 add。可能是我做错了什么。请帮我解决这个问题。

Controller

@Controller
public class SpringController {

@Autowired
private UserService userService;

@Autowired
private CorrectValidator correctValidator;

@Autowired
private ExistValidator existValidator;

@Autowired
private Unwrapper unwrapper;

@RequestMapping(value = "/create", method = RequestMethod.POST)
public String create (Wrapper wrapper,
BindingResult result)
throws ParseException {
correctValidator.validate(wrapper, result);
existValidator.validate(wrapper, result);
if (result.hasErrors()) {
return "add";
}
userService.create(unwrapper.unwrap(wrapper));
return "redirect:/welcome";
}
}

测试

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring-servlet.xml"})
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class})
public class ControllerTest {

@InjectMocks
private SpringController controller;

@Mock
private Wrapper wrapper;

@Mock
private BindingResult result;

@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
mockMvc = standaloneSetup(controller)
.setSingleView(mockView)
.build();
}

@Test
public void testCreateBad() throws Exception {
when(result.hasErrors()).thenReturn(true);

mockMvc.perform(post("/create", wrapper, result))
.andExpect(status().isOk())
.andExpect(view().name("add"));
}

}

最佳答案

问题是您没有正确使用 post() 方法。 See the javadoc here .

在您传递的参数中

post("/create", wrapper, result)

wrapperresult 用作 url 变量,而不是用作 create 方法的方法参数。您不能通过这种方式模拟 BindingResult。实际上,在我看来, mock 它是非常困难的,从长远来看可能不值得。如果有任何事情您应该使用有效或无效的命令对象进行测试。

关于java - Mockito when().thenReturn 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18984853/

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