在@PostConstruct之后调用Mockito @Before方法

时间:2019-02-07 10:02:33

标签: java spring spring-boot kotlin mockito

这是我的简化代码:

@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的优先级?

2 个答案:

答案 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)