微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Junit在EntityManager上引发NullPointerException

如何解决Junit在EntityManager上引发NullPointerException

我正在处理Junit Test个案件,这些案件引发了NullPointerException,这是我的Junit测试类结构

   @RunWith(SpringJUnit4ClassRunner.class)
   public class EmployeeTest {

      @InjectMocks
      EmployeeRepository empRepo;        

      @InjectMocks
      EmployeeService empService;

      @Mock
      EntityManager entityManager;

       List<Employee> empList=new ArrayList<Employee>();
      @Before
       public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
      }


     @Test
     public void getEmployyeList(){
       Employee e = new Employee(111,'Raunak','kumar','Hero Inc');
       List<Employee> empList=empService.getAllEmployee();
       Employee e1 = empList.stream().filter(emp->emp.getEmpId()==111).findAny().get();
       assertEquals(e,e1);
     }

   }

EmployeeService上,我正在使用EntityManager

    public class EmployeeService{

     @Autowired
     EntityManager em;

     public List<Employee> getAllEmployee(){
           return  em.createNativeQuery("select e.* from employee e").getResultList();
     }
   }

当我debugging时,代码发现em.createNativeQuery("select e.* from employee e")返回null。从Rest API开始,一切正常。

尝试

 when(empRepo.findAll()).thenReturn(empList);
     assertthat(users,containsInAnyOrder(
                hasProperty("lastName",is("Kumar"))
        ));

但是empRepo.findAll()也返回[]

解决方法

您必须使用mockito的时间对模拟实体管理器进行存根,然后返回测试用例(getEmployyeList),如下所示,这应该可以解决NPE

@Test
public void getEmployyeList(){
    Employee e = new Employee(111,'Raunak','kumar','Hero Inc');
    Query query = mock(Query.class);
    when(entityManager.createNativeQuery(anyString())).thenReturn(query);
    doReturn(Arrays.asList(e)).when(query).getResultList();
    List<Employee> empList=empService.getAllEmployee();
    Employee e1 = empList.stream().filter(emp->emp.getEmpId()==111).findAny().get();
    assertEquals(e,e1);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。