Mocked方法正在Mockito中引发NullPointerException



这是我的测试类

     @RunWith(MockitoJUnitRunner.class)
     public class ServiceTest extends Service{

    @Mock
    EntityManager eman = Mockito.mock(EntityManager.class);
    @Mock
    Query query;
    @InjectMocks
    private Service service;

   private static final String NAME = "name";

  @Before
  public void setUp() {
     this.service=new Service();
       }

   @Test
   public void firstMethodTest() {

     Query query = mock(Query.class);   
    when(
            eman.createNamedQuery(NAME)).thenReturn(query);
    when
        (  query.setParameter("name", Type)).thenReturn(query);
    when (query.getSingleResult()).thenReturn(type);
    **service.getAllMethod(1, "string");**

        assertSame(/*Something to compare */);
    }
}

这是我的服务类方法

    public  getAllMethod(int ID, String string)
         {

        Query query=em
                .createNamedQuery("name");
        **query.setParameter("string", Type);**
         type= query.getSingleResult();

}

当从模拟对象调用service.getAllMethod(1,"String")时,我在query.setParameter("name",Type)处获得NPE,因为我认为query仍然为NULL。请假设我的服务运行良好。提前感谢

调试时,我检查服务类中查询查询的值。其值为null。想不出如何解决这个问题。

在每次测试之前都要重新创建服务。因此,Mockito正在向其中注入mock的Service已经丢失。

去掉setUp方法,而是像这样声明服务:

@InjectMocks
private Service service = new Service();

还有一些其他的问题。例如,不需要EntityManager Mockito.mock,测试类不应该扩展Service@Mock Query没有被使用。


以下是一个粗略的模板:

@RunWith(MockitoJUnitRunner.class)
public class TestA {
    @Mock
    EntityManager eman;
    @InjectMocks
    private Service service = new Service();
    @Test
    public void firstMethodTest() {
        Query query = Mockito.mock(Query.class);
        Mockito.when(eman.createNamedQuery(NAME)).thenReturn(query);
        service.getAllMethod(1, "string");
    }
}

假设服务类似于:

public class Service {
    @Autowired
    EntityManager entityManager;
    public void getAllMethod(int i, String s) {
        Query q = entityManager.createNamedQuery("name");
        ...   q isn't null here for me
    }
}

相关内容

  • 没有找到相关文章

最新更新