2011-03-03 70 views
2

確保偵聽器的更新甚至被調用的最簡單方法是什麼?UnitTest:如何測試偵聽器的更新是否被調用

更新:我正在測試Listener(不是主題),一旦更新被調用,測試通過。

 d.addServiceComponentChangeListener(new ServiceComponentChangeListener() { 

     //In the Unittest, I want to make sure this has been called 
     public void notifyChange(ServiceComponentChangeEvent event) { 
      System.out.println("@notifyChange"); 

     } 
    }); 

回答

0

如果偵聽器實現了接口,那麼可以創建一個實現偵聽器的模擬類。那麼你可以設計這個模擬來適合你的測試。如果它沒有實現一個接口,只要listeners類不是最終的,你可以擴展它。

+0

如果是異步的,則可能需要等待,睡一段時間,如果沒有收到應答,則失敗。 – Zoidberg 2011-03-03 03:15:21

2

即使聽者沒有實現接口,仍然可以使用類似於Mockito的東西爲其創建一個模擬。使用運行時代碼插入,檢查要模擬的類,以及紫色小怪塵埃,它可以模擬其他類。在我公司,大多數單元測試使用Mockito(較新的)或EasyMock(較舊的),所以我們確信我們只測試一個類。

但我質疑你的陳述「更新:我正在測試聽衆(不是主題)」。如果你的測試正在驗證監聽器被調用,你正在測試應該調用監聽器的事情,而不是監聽器本身。那它是哪一個?

+0

你是對的,我實際上是在測試這個話題,但是從聽衆的角度來看.. – pierrotlefou 2011-03-03 08:17:37

0

我會測試它通過替換調用System.out或任何該部分應該實際上做一個接口,後來被嘲笑和使用行爲驗證,以確保它被調用。所以......

public class d 
    { 
     private MessageDisplayer m_UserDisplay; 

     public d() 
     { 
      m_UserDisplay = new DisplaySystemOut() 
     } 

     public d(MessageDisplayer AllowsSensing) 
     { 
      m_UserDisplay = AllowsSensing; 
     } 

    //blah blah blah.... 

       d.addServiceComponentChangeListener(new ServiceComponentChangeListener() 
      { 
      public void notifyChange(ServiceComponentChangeEvent event) { 
       m_UserDisplay.DisplayMessage("@notifyChange"); 

      } 
     }); 

    } 

現在,您可以在您的測試嘲笑MessageDisplayer,並確保它被調用,該參數是等於「@notifyChange」

相關問題