簡體   English   中英

EasyMock為預期方法返回Null

[英]EasyMock returns Null for Expected Method

我遇到了EasyMock的問題,為預期的(定義的)方法調用返回null。

創建模擬對象

mock = EasyMock.createMock(DAO.class);

模擬在單元測試中設置。

expect(mock.update(myObj).andReturn(myObjUpdated).once();
replayAll();
service.setDao(mock);
service.processData(myObj);
verifyAll();

processData方法只是調用

MyObject objUpdated = dao.update(myObj);

這是構建模擬的接口。

public interface DAO {
   public <ENTITY> ENTITY update(ENTITY entity);
}

我對可能導致問題的原因感到很困惑。 我已經確認'obj'與我在單元測試中定義的對象相同。 我也沒有遇到任何其他嘲笑的問題(我知道)。

這個問題可能與傳入的Object有關嗎?

提前致謝。 我真的不確定其他哪些信息對您有幫助。

編輯:這是測試類(事實證明我的誤解開始了)

public class TestMyService extends EasyMockHelper {...}

事實證明,我的主要問題不在於期望,甚至不是模擬對象的創建。 我對我的測試擴展功能的EasyMockSupport類有一個基本的誤解。 這在文檔中沒有很好地介紹,但是如果你仔細檢查這些例子,我的錯誤就變得很明顯了。

EasyMockSupport類使我的測試類可以訪問諸如replayAll(),verifyAll()和resetAll()之類的方法。 這些操作讓我現在擔心手動控制每個創建的模擬對象。 但是,文檔沒有提到的是你必須使用EasyMockSupport類提供的方法創建Mock對象,以便它可以正確地注冊控件。 ((這使得總體感覺順便說一句,我根本就沒有在任何地方閱讀它))。 EasyMockSupport類,如果您查看API,它為子類提供了它通常從EasyMock類中靜態使用的所有方法,例如createMock(Class class)。

至於更新的代碼

public class TestMyService extends EasyMockSupport {
   private MyService service;
   private MyDao dao;

   private MyObject myObj;

   @Before public void setUp() {
      service = new MyService();

      // THIS IS THE KEY
      mock = createMock(IDao.class); //CORRECT
      // mock = EasyMock.createMock(IDao.class); //WRONG

      service.setDao(mock);
      myObj = new MyObject("expectedData");
   }
   @After public void tearDown() {
      verifyAll();
   }
   @Test public void testMyService() {
      expect(mock.update(myObj)).andReturn(myObj);
      replayAll();
      service.myService(myObj);
   }
}

public class MyService() {
   private IDao dao;
   public void setDao(IDao dao) {this.dao = dao; }
   public MyObject myService(MyObject myObj) {
      return dao.update(myObj);
   }
}

暫無
暫無

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

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