[英]Java - Create an return a Stub interface inside a method
我有这个界面
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
}
}
}
}
}
但是我不知道这是否可行
当然可以,通常有3种方法可以做到这一点:
@Primary
来确保弹簧加载。 您不需要自己实现它,可以考虑使用Mockito
类的Mockito
框架,您只需要这样做:
@Primary @Bean public MQTTClient mqttClient() { return Mockito.mock(MQTTClient.class); }
spring-boot
,则可以从版本1.4.x
使用注释@MockBean
。 您必须将单元测试用于测试目的,而不是在配置文件中。 您必须声明内部类或创建匿名类。在本示例中,您尝试在同一块中创建对象和类声明。因此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();
}
注意:
实际上,如果您正在测试接口,则意味着您正在等待该接口的实现。因此内部类或匿名类不适用于此目的,因为必须将测试级别与业务级别分开,否则稍后您将对代码感到困惑。如果您只是假设实现已通过并继续应用程序的其余部分,请使用模拟。当真正的实现出现时,请使用真正的实现类进行测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.