作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 JHipster 构建的应用程序,其中包含多个测试。我创建了一个简单的配置类来实例化一个连接到外部服务的 bean:
@Configuration
public class KurentoConfiguration {
@Bean(name = "kurentoClient")
public KurentoClient getKurentoClient(@Autowired ApplicationProperties applicationProperties) {
return KurentoClient.create(applicationProperties.getKurento().getWsUrl());
}
}
但是正如您所猜测的那样,这段代码在测试期间崩溃了,因为外部服务没有启动,但这段代码仍在应用程序上下文加载期间运行。
所以我需要创建这个 bean 的“无状态”版本以在测试期间使用。
这是一个由于我的配置而失败的测试的简单示例:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Face2FaceApp.class)
public class LogsResourceIntTest {
private MockMvc restLogsMockMvc;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
LogsResource logsResource = new LogsResource();
this.restLogsMockMvc = MockMvcBuilders
.standaloneSetup(logsResource)
.build();
}
@Test
public void getAllLogs()throws Exception {
restLogsMockMvc.perform(get("/management/logs"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE));
}
}
有什么解决方案可以使这个 bean 在单元测试期间不高度依赖外部服务?
最佳答案
您可以在测试中使用 MockBean 注释来替换现有的 bean:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Face2FaceApp.class)
public class LogsResourceIntTest {
@MockBean
private KurentoClient kurentoClient;
private MockMvc restLogsMockMvc;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
LogsResource logsResource = new LogsResource();
this.restLogsMockMvc = MockMvcBuilders
.standaloneSetup(logsResource)
.build();
given(kurentoClient.someCall()).willReturn("mock");
}
....
}
这是 Spring Boot 文档: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications-mocking-beans
关于java - 使用 Spring 进行测试时如何不连接到服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43325228/
我是一名优秀的程序员,十分优秀!