簡體   English   中英

模擬方法在Mockito中引發NullPointerException

[英]Mocked Method is throwing NullPointerException in Mockito

這是我的考試課

     @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,因為我認為查詢仍然為NULL。 請假設我的服務運行正常。 提前致謝

在調試時,我檢查服務類中Query query的值。它的值為null。無法弄清楚如何解決此問題。

您將在每次測試之前重新創建服務。 因此,Mockito向其注入模擬的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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM