我有一个像这样的spring boot配置类:
{
"item1": "Phone",
"item2": "1-512-555-0550"
}
我有一些这样的集成测试:
@Configuration
public class ClockConfiguration {
@Bean
public Clock getSystemClock() {
return Clock.systemUTC();
}
}
并进行如下测试:
@SpringBootTest(classes = MyApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
public abstract class AbstractIntegrationTest {
}
我希望能够抵消Clock bean,以便在一天中的不同时间运行一些测试。我该怎么做?
注意:我看到several stack overflow answers与此类似,但是我无法让他们正常工作。
根据其他响应,看来解决方案应类似于:
public class MiscTests extends AbstractIntegrationTest{
@Test
public void CreateSomethingThatOnlyWorksInThe Morning_ExpectCorrectResponse() {
}
但是那里什么也没有发生。我需要@导入东西吗?我需要@Autowired吗?
谢谢!
答案 0 :(得分:1)
在使用Spring Boot时,您可以利用@MockBean
注释:
@SpringBootTest(classes = MyApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
public abstract class AbstractIntegrationTest {
@MockBean
private Clock clockMock;
}
然后,您可以相应地且唯一地对那个bean的公共方法进行存根测试:
@Test
public void CreateSomethingThatOnlyWorksInThe Morning_ExpectCorrectResponse() {
when(clockMock.getTime()).thenReturn(..);
}
根据@MockBean
的javadoc:
在上下文中定义的任何相同类型的现有单个bean都会 被模拟代替。
答案 1 :(得分:0)
@RunWith(SpringRunner.class)
public class ClockServiceImplIntegrationTest {
@TestConfiguration
static class TestOverridingClockServiceConfiguration {
@Bean
public ClockService clockService() {
return new ClockServiceImpl();
}
}
@Autowired
private ClockService clockService;
@MockBean
private ClockRepository clockRepository;
// write test cases here
}
如果您已有配置,则c