2011-07-31 114 views
0

我試圖嘲笑與JMockit一個DAO:嘲笑接口爲空

public interface MyDao { 
    Details getDetailsById(int id); 
} 

利用這種測試類:

public class TestClass { 

    @Test 
    public void testStuff(final MyDao dao) throws Exception 
    { 
     new Expectations() 
     { 
      { 
       // when we try to get the message details, return our sample 
       // details 
       dao.getDetailsById((Integer) any); ***THROWS AN NPE 
       result = sampleDetails; 
      } 
     }; 

     ClassUsingDao daoUser = new ClassUsingDao(dao); 
     // calls dao.getDetailsById() 
     daoUser.doStuff(); 
} 

當DAO對象是在預期塊使用的,NPE是拋出。我試着將dao的聲明移動到用@Mocked註釋的成員變量,但同樣的事情發生。我也嘗試過使用MyDao的具體實現,並且發生同樣的事情。

+0

你用春天嗎? – iddqd

+0

不,這個類目前沒有使用Spring,但將來可能會用於將Dao注入到ClassUsingDao中。 – Brian

回答

2

這不是dao這是空的,但是any。從Integer(在你的轉換之後)拆解爲int需要一個解引用,這會引發一個NullPointerException異常。請嘗試使用anyInt

我不認爲jMockit文檔談到Expectations.any的實際值是什麼,但請注意,它可以成功轉換爲任何其他類型(可以說(String)any(Integer)any)。在Java中,所有演員總能成功的唯一值是null。所以,Expectations.any必須爲空。一個驚喜,但真的不可避免。

+0

果然,就是這樣。感謝您的幫助 - 我花了好幾個小時來移動它,這正好在我面前。謝謝! – Brian