2017-04-20 61 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级别必须与 业务级别分开。否则,稍后您会在代码中感到困惑。如果 您只是假设实现已通过并继续其余的应用,则应用该模拟。当真正的实现出现时,使用 实际实现类来测试。