在Spring Boot中模拟存储库并测试Rest API

我正在尝试模拟下面的MsgController中存在的两个存储库:

InflowRepository和OrderRepository

并测试其余端点:来自另一个TestController的path =“ / api / msg / inflow”。

在TestController中编写以下语句时出现错误:-

 when(orderrepository.findByOrderId(inflow.getOrder())).thenReturn(orderp);
    this.mockMvc.perform(post("/api/msg/inflow").content(requestJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk());    
    verify(inflowrepository,times(1)).findByOrderUuid(orderp.getUuid());
    verifyNoMoreInteractions(inflowrepository);

/ then语句时,您能否帮助我编写正确的文字?还是有其他替代方法?

MsgController如下:

@RestController
@EnableAutoConfiguration
@CrossOrigin
public class MsgController {

    @Autowired
    private InflowRepository inflowRepo;

    @Autowired
    private OrderRepository orderRepo;

    @PostMapping(path = "/api/msg/inflow",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity<String> update(@RequestBody InflowMessage msg) {

        System.out.print("Printing the message only"+ msg);

        ObjectMapper mapper = new ObjectMapper().registerModule(new ParameterNamesModule())
.registerModule(new Jdk8Module())
.registerModule(new JavaTimeModule());
        mapper.findAndRegisterModules();

mapper.registerModule(new JavaTimeModule());
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);

    mapper.configure(SerializationFeature.WRAP_ROOT_VALUE,false);
        try {
            String jsonInflow = mapper.writeValueAsString(msg);
            } catch (JsonProcessingException ex) {
            Logger.getLogger(MsgController.class.getName()).log(Level.SEVERE,null,ex);
        }

        Order o = orderRepo.findByOrderId(msg.getOrder()).orElse(null);

        ResponseEntity<String> res;
        if (o != null) {

            System.out.print("Order o is not null");
            List<Inflow> lst = inflowRepo.findByOrderUuid(o.getUuid());

            System.out.print("Inflow list has been generated");
            Inflow inflow=new Inflow();
            if (lst.size()>0) {
                inflow=lst.get(0);
            } else {
                inflow.setUuid(UUID.randomUUID());
            }
            inflow.setOrder(o);
            //inflow.seteta(msg.getDeliveryDate());
            inflow.setamount(msg.getamount());
            inflowRepo.save(inflow);
            res = new ResponseEntity<>("message processed",HttpStatus.OK);
        } else {
            System.out.print("After Order o has not been generated");
            res = new ResponseEntity<>("unknown order id:" + msg.getOrder(),HttpStatus.NOT_FOUND);
        }
        return res;
    }

}

TestController如下:

public class TestController {

ObjectMapper mapper;

@InjectMocks
private MessageController messagecontroller;

@Autowired
private MockMvc mockMvc;


@Mock
private InflowRepository inflowrepository;

@Mock
private OrderRepository orderrepository;

@Before
public void setup(){


    MockitoAnnotations.initMocks(this);
    this.mockMvc = MockMvcBuilders.standalonesetup(messagecontroller).build();
}

@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss",timezone="UTC")
private LocalDateTime nowt=LocalDateTime.now();


@Test
public void testupdate() throws Exception{

 Part part = new Part();
 part.setDescription("test data");
 part.setName("PA17345");

 Demand demand= new Demand();
 demand.setamount(10002);
 demand.setPart(part);
 demand.setDemandId("IEO123");
demand.setDemandTime(nowt);
 UUID uuid=UUID.randomUUID();
 Order orderp=new Order();
orderp.setDeliveryTime(nowt);
orderp.setComplied(true);
orderp.setSupplierId("Hello Gmbh");
orderp.setOrderId("OE12345");
orderp.setamount(10002);
orderp.setDemand(demand);
orderp.setUuid(uuid);

orderrepository.save(orderp);

 InflowMessage inflow = new InflowMessage();
inflow.setamount(10002);
inflow.setDeliveryDate(nowt);
inflow.setOrder("OE12345");

Inflow in=new Inflow();
in.setOrder(orderp);
in.seteta(nowt);
in.setamount(10002);
in.setUuid(uuid);

System.out.print("Hello"+ "\n");
System.out.print(in.getOrder());
System.out.print("\n"+in.geteta());
System.out.print("\n"+in.getamount());

inflowrepository.save(in);

ObjectMapper mapper = new ObjectMapper().registerModule(new ParameterNamesModule())
.registerModule(new Jdk8Module())
.registerModule(new JavaTimeModule());


mapper.findAndRegisterModules();

mapper.registerModule(new JavaTimeModule());
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
    ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
    String requestJson=mapper.writeValueAsString(inflow);

  when(orderrepository.findByOrderId(inflow.getOrder())).thenReturn(orderp);

this.mockMvc.perform(post("/api/message/inflow").content(requestJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk());    
    verify(inflowrepository,times(1)).findByOrderUuid(orderp.getUuid());
    verifyNoMoreInteractions(inflowrepository);

}

}
wangleaishang9 回答:在Spring Boot中模拟存储库并测试Rest API

您可以尝试:doReturn

List list = new LinkedList();
List spy = spy(list);

when(spy.get(0)).thenReturn("foo");
doReturn("foo").when(spy).get(0);

https://static.javadoc.io/org.mockito/mockito-core/2.13.0/org/mockito/Mockito.html#doReturn-java.lang.Object-

本文链接:https://www.f2er.com/3058803.html

大家都在问