这是我的简化代码:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MockitoSpringBootTest {
@MockBean
private MyBean myBean;
@Before
private void before(){
Mockito.when(myBean.getSomeString()).thenReturn("TEST"));
}
}
@Service
private class TestClass {
@Autowired
private MyBean myBean;
@PostConstruct
public void initialize() {
myBean.getSomeString(); //SmartNull - method is not stubbed yet
}
}
我的问题是,我需要对MyBean
方法进行存根,然后再将具有该对象自动关联的任何其他类运行@BeforeClass
方法。现在,@Before
方法是在任何@PostConstruct
正在自动装配此bean的任何类之后执行的(有多个)。
MyBean是作为模拟自动装配的,但是方法没有被标记,所以我得到:“此模拟的未标记方法返回的SmartNull:”
在Spring容器初始化中是否可以设置模拟bean的优先级?
答案 0 :(得分:1)
也许不是最优雅的解决方法,但是您可以在静态块中模拟行为。静态块中的代码在@Before
和@PostConstruct
之前执行。我不认为使用注释(@MockBean
)进行模拟是可行的,但也可以通过编程方式完成。
答案 1 :(得分:1)
使用@TestConfiguration而不是使用@MockBean可能有助于解决此问题。
@TestConfiguration
static class Configuration {
@Bean
public BeanToMock name() {
// return mock object
}
}
并使用@ContextConfiguration注释测试类
@ContextConfiguration(classes = TestClassName.Configuration.class)