繁体   English   中英

在Spring MVC Controller中测试POST方法的正确方法

[英]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"));

    }}

例如保存对象(例如客户)之类的常见错误可能是以下几种:

  1. POST请求中缺少属性,例如“ FirstName”
  2. 使用只读属性,例如“ ID”
  3. 无效的属性类型(预期为int,获得了字符串)
  4. 无效的内容类型(期望的JSON,获取了XML)
  5. 请求是否具有保存此对象的权限?
  6. 无效请求是否返回适当的响应代码?

除了单元测试之外,我强烈建议Fiddler,因为它看起来就像您在使用Windows。

Fiddler允许您拦截系统发出的每个HTTP请求。 这将使您可以检查单元测试发出的请求,以及有关POST请求标头,正文等的详细信息。

https://www.telerik.com/fiddler

当特定请求失败并且与成功请求相比,您需要确切知道请求的外观时,此工具是您要做的最后一件事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM