Ben*_*Ben 10 java spring annotations postconstruct
在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 .....
}
Run Code Online (Sandbox Code Playgroud)
在单元测试期间,我不希望@PostConstruct
调用该函数,有没有办法告诉Spring不要进行后期处理?或者是否有一个更好的注释用于在非测试中调用类的启动方法?
任何:
FileListService
你的测试中的子类并覆盖该方法什么都不做(正如mrembisz所说,你需要将子类放在扫描的包中仅用于测试并将其标记为@Primary
)FileListService
以便Spring注入文件列表(无论如何这是一个更干净的设计),并在测试中注入一个空列表new FileListService()
并自己注入依赖项由于您不是测试FileListService
而是依赖类,您可以模拟测试.在单独的测试包中创建模拟版本,该测试包仅由测试上下文扫描.使用@Primary
注释标记它,因此它优先于生产版本.
小智 5
声明一个 bean 来覆盖现有类并使其成为 Primary。
@Bean
@Primary
public FileListService fileListService() {
return mock(FileListService.class);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7399 次 |
最近记录: |