首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Mockito NullPointerException模拟NullPointerException

用Mockito NullPointerException模拟NullPointerException
EN

Stack Overflow用户
提问于 2020-07-23 05:17:17
回答 1查看 1.1K关注 0票数 1

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

代码语言:javascript
运行
复制
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);

    }
    }

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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
StoredProcedureQuery ADPsDetailsStoredProcedure = manager.createStoredProcedureQuery(
                "dbo.getADPsinfo","ADPsDetails");

在这方面请帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-23 05:24:25

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

代码语言:javascript
运行
复制
@InjectMocks
private ADPsService ADPsService;

@Mock
private EntityManager targetEm;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63047335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档