使用 Mockito NullPointerException 模拟 StoredProcedureQuery

Mock StoredProcedureQuery with Mockito NullPointerException

我正在 Spring 引导应用程序中以下列方式测试服务层:

import static org.mockito.Mockito.mock;

@RunWith(MockitoJUnitRunner.class)
public class ADPTest {
    @InjectMocks
    private ADPsService ADPsService;
    @Test
    public void getADPsDetails() {
        ADPsStoredDetails e = new ADPsStoredDetails();
        e.setAlert(STRING_VALUE);
        e.setTsid(STRING_VALUE);
        
        List<ADPsStoredDetails> ADPsStoredDetails = new ArrayList<ADPsStoredDetails>();
        ADPsStoredDetails.add(e);

        EntityManager targetEm = mock(EntityManager.class);
        StoredProcedureQuery query = mock(StoredProcedureQuery.class);
        Mockito.when(targetEm.createStoredProcedureQuery("dbo.getADPsinfo","ADPsDetails")).thenReturn(query);
        Mockito.when(query.getResultList()).thenReturn(ADPsStoredDetails);
        
        List<ADPDTO> actionsDTO =  ADPsService.getADPsDetails();
        assertTrue("List has values", actionsDTO.size() > 0);

    }
    }

我正在测试的方法具有以下签名

public List<ADPDTO>  getADPsDetails() {
        // TODO Auto-generated method stub
        StoredProcedureQuery ADPsDetailsStoredProcedure = manager.createStoredProcedureQuery(
                "dbo.getADPsinfo","ADPsDetails");
        
        List<ADPsStoredDetails> results = ADPsDetailsStoredProcedure.getResultList();
        
        Map<String, List<ADPsStoredDetails>> result = results.stream()
                .collect(Collectors.groupingBy(ADPsStoredDetails::getTsid));

        List<ADPDTO> ADPDTO = new ArrayList<ADPDTO>();
        for (Map.Entry<String, List<ADPsStoredDetails>> entry : result.entrySet())  {
            ADPDTO e = new ADPDTO();
            e.setTsName(entry.getKey());
            e.setAlerts(entry.getValue());
            ADPDTO.add(e);
        } 

我在

的服务方法中得到 java.lang.NullPointerException
StoredProcedureQuery ADPsDetailsStoredProcedure = manager.createStoredProcedureQuery(
                "dbo.getADPsinfo","ADPsDetails");

请帮忙解决。

您没有为要注入的 InjectMocks 创建 Mock 个实例。将 targetEm 的创建移动为实例变量。

@InjectMocks
private ADPsService ADPsService;

@Mock
private EntityManager targetEm;