This is my simplified code:
@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
}
}
My problem is that I need to stub MyBean methods, before any other class which has this object autowired will run @BeforeClass method. Right now @Before method is executed after @PostConstruct of any class which is autowiring this bean (there's more than one).
MyBean is autowired as a mock, but method is not stubbed, so I get: "SmartNull returned by this unstubbed method call on a mock:"
Is there any way to set priority of mocked bean in Spring container initialization ?
Using @TestConfiguration rather than using the @MockBean might help to solve this problem.
@TestConfiguration
static class Configuration {
@Bean
public BeanToMock name() {
// return mock object
}
}
And annotating the test class with @ContextConfiguration:
@ContextConfiguration(classes = TestClassName.Configuration.class)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With