在Spring组件中,我有一个@PostConstruct
语句。与下面类似:
@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 .....
}
在单元测试期间,我不希望调用@PostConstruct
函数,有没有办法告诉Spring不要进行后期处理?或者是否有更好的注释用于在非测试期间调用类的启动方法?
答案 0 :(得分:5)
任何一个:
FileListService
并覆盖该方法不执行任何操作(正如mrembisz所说,您需要将子类放在扫描包中仅用于测试并将其标记为@Primary
)FileListService
以便Spring注入文件列表(无论如何这是一个更干净的设计),并在测试中注入一个空列表new FileListService()
创建并自行注入依赖项答案 1 :(得分:5)
由于您不是测试FileListService
而是依赖类,您可以模拟测试。在单独的测试包中创建模拟版本,该测试包仅由测试上下文扫描。使用@Primary
注释标记它,因此它优先于生产版本。
答案 2 :(得分:0)
声明一个bean来覆盖现有的类并将其设置为Primary。
@Bean
@Primary
public FileListService fileListService() {
return mock(FileListService.class);
}