我在尝试测试时遇到问题
以下REST方法
@GetMapping
@RequestMapping("/create")
ResponseEntity<Order> createOrders(@RequestBody String body) {
ObjectMapper mapper = new ObjectMapper();
try{
Map<String,Object> mapBody = mapper.readValue(body,Map.class);
Long cusId = Long.valueOf((int)mapBody.get("customer_id"));
Customer customer = customerRepository.findOne(cusId);
Product product = productRepository.findByProductName((String)mapBody.get("product_name"));
Order order = new Order(customer,product,(int)mapBody.get("quantity"));
orderRepository.saveAndFlush(order);
return new ResponseEntity(order, HttpStatus.OK);
}
catch(Exception e){
e.printStackTrace();
return new ResponseEntity("error with original port", HttpStatus.EXPECTATION_FAILED);
}
}
我已经尝试了很多东西,似乎没什么用。 调用REST方法工作正常,但似乎我可以使用 我的测试中的@AutoConfigureMockMvc或@DataJpaTest
我的代码目前如下
@SpringBootTest
@AutoConfigureMockMvc
@DataJpaTest
public class OrderTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ProductRepository productRepositoryTest;
@Autowired
private CustomerRepository customerRepositoryTest;
@Test
public void submitNewOrdersForBricks() {
try {
Customer cus1 = new Customer("cus1");
customerRepositoryTest.saveAndFlush(cus1);
Product pro1 = new Product("brick1","red brick",0.96);
productRepositoryTest.saveAndFlush(pro1);
this.mockMvc.perform(post("/create")
.content("{\"customer_id\":"+cus1.getCustomerId()+",\"product_name\":\"brick1\",\"quantity\":150}")
.contentType(MediaType.APPLICATION_JSON))
.andDo(print()).andExpect(status().isCreated())
.andExpect(jsonPath("$.order_id").value(1));
}
catch(Exception e){
e.printStackTrace();
}
}
}
我也尝试过使用
when(customerRepository.findOne(cusId)).thenReturn(cus1);
这对我的控制器没有任何影响。 请注意,仅当我删除@DataJpaTest时才会调用控制器方法createOrders,但是不会为客户和产品创建ID。
任何帮助都会很棒。
答案 0 :(得分:0)
@DataJpaTest用于存储库测试。在这种情况下,@ DataJpaTest是无用的。
而且,在测试课上,你错过了
@Autowired
private OrderRepository orderRepository;