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 ?
Any of:
FileListService
in your test and override the method to do nothing (as mrembisz says, you would need to place the subclass in package scanned only for tests and mark it as @Primary
)FileListService
so the list of files is injected by Spring (this is a cleaner design anyway), and in your tests, inject an empty listnew FileListService()
and inject the dependencies yourself