我有基于SpringMVC和Hibernate的简单应用程序,试图测试POST
方法,该方法将客户Customer.class
保存到数据库中。不想测试数据库,只有简单的单元测试。得到了绿色测试,但感觉仍然不够,我该如何重构将其按原样进行?
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);
}
}
客户daoimpl.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"));
}}
诸如保存诸如客户之类的对象之类的常见错误可能是以下内容:
- 帖子请求中缺少属性,例如" firstName"
- 使用" ID"这样的可读属性
- 无效的属性类型(预期int,get string(
- 无效的内容类型(预期JSON,GOT XML(
- 请求是否有权保存此对象?
- 无效的请求是否返回适当的响应代码?
除了单元测试外,我强烈推荐提示器,因为它看起来像您在使用Windows。
提琴手将允许您拦截系统提出的每一个HTTP请求。这将使您可以检查单位测试的请求,并提供有关您的邮政请求标题,身体等的详细信息。
https://www.telerik.com/fiddler
此工具是当特定请求失败时所做的最后一件事,您需要确切知道与成功的请求相比。