Within a Spring Component I have a @PostConstruct
statement. Similar to below:
@Singleton @Component("filelist") public class FileListService extends BaseService { private List listOfFiles = new Arrays.list(); //some other functions @PostConstruct public void populate () { for (File f : FileUtils.listFiles(new File(SystemUtils.JAVA_IO_TMPDIR), new String[]{"txt"},true)){ listOfFiles.add(f.getName()); } } @Override public long count() throws DataSourceException { return listOfFiles.size(); } // more methods ..... }
During Unit tests I would not like to have the @PostConstruct
function called, is there a way to telling Spring not to do post processing? Or is there a better Annotation for calling a initiation method on a class durning non-testing ?
Advertisement
Answer
Since you are not testing FileListService
but a depending class, you can mock it for tests. Make a mock version in a separate test package which is scanned only by test context. Mark it with @Primary
annotation so it takes precedence over production version.