[英]Proper way to test POST method in Spring MVC Controller
我有一个基于SpringMVC和Hibernate的简单应用程序,试图测试一种将Customer Customer.class
保存到数据库的POST
方法。 现在还不想测试数据库,仅需要简单的单元测试。 通过了测试绿色,但是感觉仍然不够,如何重构它以使其达到预期效果?
CustomerController.class:
@Controller
@RequestMapping("/customer")
public class CustomerController {
@Autowired
private CustomerService customerService;
@PostMapping("/saveCustomer")
public String saveCustomer(@ModelAttribute("customer") Customer theCustomer) {
customerService.saveCustomer(theCustomer);
return "redirect:/customer/list";
}}
CustomerServiceImpl.class:
@Service
public class CustomerServiceImpl implements CustomerService {
@Override
@Transactional
public void saveCustomer(Customer theCustomer) {
customerDAO.saveCustomer(theCustomer);
}
}
CustomerDAOImpl.class:
@Repository
public class CustomerDAOImpl implements CustomerDAO {
@Override
public void saveCustomer(Customer theCustomer) {
Session currentSession = sessionFactory.getCurrentSession();
currentSession.saveOrUpdate(theCustomer);
}
}
CustomerControllerTest.class:
public class CustomerControllerTest {
@InjectMocks
CustomerController controller;
@Mock
CustomerService mockCustomerService;
@Mock
View mockView;
MockMvc mockMvc;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(controller)
.setSingleView(mockView)
.build();
}
@Test
public void testSaveCustomer() throws Exception {
mockMvc.perform(post("/customer/saveCustomer"))
.andExpect(status().isOk())
.andExpect(view().name("redirect:/customer/list"));
}}
例如保存对象(例如客户)之类的常见错误可能是以下几种:
除了单元测试之外,我强烈建议Fiddler,因为它看起来就像您在使用Windows。
Fiddler允许您拦截系统发出的每个HTTP请求。 这将使您可以检查单元测试发出的请求,以及有关POST请求标头,正文等的详细信息。
https://www.telerik.com/fiddler
当特定请求失败并且与成功请求相比,您需要确切知道请求的外观时,此工具是您要做的最后一件事。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.