I am having a SimpleTest :
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SimpleTestConfig.class)
public class SimpleTest {
@Test
You can define custom component scan filter for excluding it.
Example code will be like:
@SpringBootApplication()
@ComponentScan(excludeFilters=@Filter(type = FilterType.REGEX, pattern="com.wyn.applications.starter.Starter*"))
public class SimpleTestConfig {
}
This works for me.
For further reading go to this blog.
Each component scan does filtering individually. While you exclude Starter.class
from SimpleTestConfig
, SimpleTestConfig
initializes Application
, which does it's own @ComponentScan
without excluding Starter
.
The clean way of using ComponentScan is for each ComponentScan to scan separate packages, that way each filter works fine. When 2 separate ComponentScans scan the same package (as in your tests), this does not work.
One way to trick this is to provide a mock Starter
bean:
import org.springframework.boot.test.mock.mockito.MockBean;
public class SimpleTest {
@MockBean
private Starter myTestBean;
...
}
Spring will use that mock instead of the real class, thus the @PostConstruct
method will not be called.
Other common solutions:
Application.class
in any unit test@Profile("!TEST")
on the Starter
class@ConditionalOn...
annotation on the Starter
class