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

标签 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
    }

}

我的问题是,我需要 stub MyBean 方法,然后任何其他 Autowiring 此对象的类将运行 @BeforeClass 方法。现在,@Before 方法在 Autowiring 该 bean 的任何类的 @PostConstruct 之后执行(有多个)。

MyBean 作为模拟 Autowiring ,但方法未 stub ,因此我得到:“模拟上的此未 stub 方法调用返回的 SmartNull:”

有没有办法在 Spring 容器初始化中设置模拟 bean 的优先级?

最佳答案

使用@TestConfiguration而不是使用@MockBean可能有助于解决此问题。

@TestConfiguration
    static class Configuration {
        @Bean
        public BeanToMock name() {
            // return mock object           
        }
    }

并使用@ContextConfiguration注释测试类:

@ContextConfiguration(classes = TestClassName.Configuration.class)

关于java - Mockito @Before 方法在 @PostConstruct 之后调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54570738/

相关文章:

java - Azure 网站 - 增加 Java/Tomcat 堆大小?

Spring Webflow 阻止用户在流程完成后返回到流程的开头

java - Spring Reactor 合并与 Concat

java - 无法通过docker容器读取文件

java - 初始化上下文时不会调用 ServletContextListener.contextInitialized

java - 密码验证 8 位数字,包含大写、小写和一个特殊字符

spring - SpringBoot 1.5.* 上的执行器日志文件不起作用。 HTTP 404

docker - jhipster-docker:spring-boot不会以控件C终止

java - Spring @Transactional 和 @Async

JavaFX:拉伸(stretch)选项卡以适应父 TabPane