2017-04-20 52 views
0

我有這樣的接口爪哇 - 創建一個回報的方法內存根接口

public interface MQTTClient { 

    public void prepareAndSend(String recipient, String message); 

} 

出於測試目的,我想使一個配置類這樣

@Configuration 
public class TestServiceConfig { 


    @Bean 
    public MQTTClient mqttClient() { 

     return new { 

     public class MQTTClientImpl implements MQTTClient { 


      @Override 
      public void prepareAndSend(String recipient, String message) { 
       // TODO Auto-generated method stub 

      } 
     } 
     } 
    } 
} 

但我不知道這是更多鈔票

回答

1

當然是可以的,一般有3種方式來做到這一點:

  1. 像你一樣,自己實施它,你可能需要@Primary來確保彈簧加載這一個。
  2. 你不需要自己來實現它,可以考慮使用嘲諷框架一樣Mockito,你需要做的僅僅是這樣的:

    @Primary 
    @Bean 
    public MQTTClient mqttClient() { 
        return Mockito.mock(MQTTClient.class); 
    } 
    
  3. 如果您正在使用spring-boot,您可以使用註釋@MockBean自版本1.4.x
1

您必須在配置文件中使用單元測試進行測試。 你必須聲明內部類或創建匿名類。在這個例子中,你正試圖在同一個block中創建對象和類聲明。所以java不能創建未聲明類的對象。首先聲明類然後創建這個類的對象。

匿名:

return new MQTTClient { 
      @Override 
      public void prepareAndSend(String recipient, String message) { 
       // TODO Auto-generated method stub 
      } 
    } 

內部類:

class MQTTClientImpl implements MQTTClient { 

     @Override 
     public void prepareAndSend(String recipient, String message) { 
      // TODO Auto-generated method stub 

     } 
    } 

    public MQTTClient mqttClient() { 
     return new MQTTClientImpl(); 
    } 

注:

實際上如果你正在測試的界面就意味着你正在等待 這個實行的interface.So內部類或匿名類是 不適合此目的。因爲t est級別必須與 業務級別分開。否則,稍後您會在代碼中感到困惑。如果 您只是假設實現已通過並繼續其餘的應用,則應用該模擬。當真正的實現出現時,使用 實際實現類來測試。