执行Mockito时引发Null指针异常

以下代码在执行时会在步骤中引发空指针异常:

this.mockMvc.perform

是因为Mockito无法模拟InflowRepository吗?在我写@Mock InflowRepository的行中没有抛出任何错误。 下面的类是测试类

public class MessageTest {

    private static Logger LOGGER = LoggerFactory.getLogger(MessageTest.class);

    ObjectMapper mapper;

    @InjectMocks
    private MsgController msgcontroller; //This MessageController class has to be mocked.

    @Autowired
    private MockMvc mockMvc;

    @Mock
    private InflowRepository inflowrepository;

    @Before
    public void setup(){


        MockitoAnnotations.initMocks(this);
        this.mockMvc = MockMvcBuilders.standalonesetup(msgcontroller).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);

     Order orderp=new Order();
    orderp.setDeliveryTime(nowt);
    orderp.setComplied(true);
    orderp.setSupplierId("Hello Gmbh");
    orderp.setOrderId("IEO123");
    orderp.setamount(10002);
    orderp.setDemand(demand);


     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);

    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);

        mapper.configure(SerializationFeature.WRAP_ROOT_VALUE,false);
        ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
        String requestJson=mapper.writeValueAsString(inflow);

                System.out.print(requestJson); // This prints the correct 

this.mockMvc.perform(post("/api/msg/inflow").content(requestJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()); 

        verify(inflowrepository,times(1)).findOrderUuid(orderp.getUuid());
        verifyNoMoreInteractions(inflowrepository);

    }   
}

InflowRepository如下所示。在这里,它扩展了CrudRepository并查询数据库。

@Repository
public interface InflowRepository extends CrudRepository<Inflow,UUID> {

    @Query("SELECT i FROM Inflow i JOIN Order o on i.order=o.uuid WHERE o.uuid=:order")
    List<Inflow> findOrderUuid(@Param("order") UUID order);

    @Query("SELECT d FROM Inflow d WHERE d.eta <=:before")
    List<Inflow> findInflow(@Param("before") LocalDateTime before);
}

为什么会生成空指针异常?该请求还会打印正确的值。

gk77338869 回答:执行Mockito时引发Null指针异常

如果您使用的是Junit5,请注释@ExtendWith(MockitoExtension.class)以测试类。

对于Junit4,请注释@RunWith(MockitoJUnitRunner.class)

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

大家都在问