Java 弹簧MVC测试
我正在努力学习spring,但我找不到足够的测试资源,很抱歉我的英语:) 我有一个返回ResponseEntity的控制器类Java 弹簧MVC测试,java,spring-boot,unit-testing,spring-mvc,spring-data-jpa,Java,Spring Boot,Unit Testing,Spring Mvc,Spring Data Jpa,我正在努力学习spring,但我找不到足够的测试资源,很抱歉我的英语:) 我有一个返回ResponseEntity的控制器类 @RestController @RequestMapping("/") public class OrderController { @Autowired private OrderRepository rep; @GetMapping("/{id}") public ResponseEntity<?&g
@RestController
@RequestMapping("/")
public class OrderController {
@Autowired
private OrderRepository rep;
@GetMapping("/{id}")
public ResponseEntity<?> getOrderById(@PathVariable("id") String id){
Order or = rep.findById(id).get();
return ResponseEntity.ok(or); }
@PostMapping("/add")
public ResponseEntity<?> addOrder(@RequestBody Order order){
rep.save(order);
return ResponseEntity.ok(order);
}
我得到了预期的状态,但被
我是否需要先创建一个Order实例,因为它是一个非常大的类,有很多变量?
测试端点的方法是什么?是否有专门用于MVC测试的书籍或在线资源?非常感谢您在嘲笑OrderRepository类,但是没有与之相关的规则, 创建一个虚拟的订单并添加如下规则
when(orderRepository.findById()).thenReturn(DummyOrder)
通过这种方式,您可以为OrderRepository设置规则,以根据您的需要进行操作。在您的情况下,您可以先调用
addOrder
,然后使用前面创建的order id
调用getOrderById
。但是你在哪里存储订单呢?在内存中还是在某种数据库中?如果是数据库,您可能需要在测试开始之前模拟/启动数据库。是否需要手动填充Order类?订单=新订单();order.setId;order.setName。。。。我得到:“不适用于参数(Order)”Order=Mockito.mock(Order.class);Mockito.when(orderRepository.findById(anyString())。然后返回(order);是,您需要手动填充订单类。请注意,返回的订单应为可选订单object@Testpublic void shouldPresistOrder()引发异常{Order o=new Order(“order00001”,“ABCD”…)Optional Order=Optional.of(o);when(orderRepository.findById(“/order00001”)。thenReturn(Order);this.mockMvc.perform(get(“/ORD00001”).accept(“application/json”).andExpect(status().isOk());我仍然获得预期状态,但是是?您能否调试代码并检查rep对象id是否与您的控制器相同?
@RunWith(SpringRunner.class)
@WebMvcTest(OrderController.class)
public class OrderControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private OrderRepository orderRepository;
@Test
public void shouldPresistOrder() throws Exception {
this.mockMvc.perform(get("/ORD00001").accept("application/json"))
.andExpect(status().isOk());}}