我有这个界面
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
}
}
}
}
}
但我不知道这是否可行
答案 0 :(得分:1)
当然有可能,通常有3种方法可以做到这一点:
@Primary
来确保弹簧加载这个。您不需要自己实现它,考虑使用类似Mockito
的模拟框架,您只需要这样做:
@Primary
@Bean
public MQTTClient mqttClient() {
return Mockito.mock(MQTTClient.class);
}
spring-boot
,则可以使用注释@MockBean
,因为版本为1.4.x
答案 1 :(得分:1)
您必须使用单元测试进行测试,而不是在配置文件中。 你必须声明内部类或创建匿名类。在这个例子中,你试图在同一个块中创建对象和类声明。所以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();
}
注意:
实际上,如果您正在测试界面,则意味着您正在等待 实现这个接口。所以内部类或匿名类是 不适合此目的。因为测试级别必须分开 商业水平。否则你会在你的代码中感到困惑。如果 你只是假设实现通过并继续其余的 然后应用程序使用mocking。当真正的实现来使用时 真正的实现类来测试。