Java 使用MockBean清理Spring上下文缓存失败loadLibrary

Java 使用MockBean清理Spring上下文缓存失败loadLibrary,java,spring-boot,mockito,spring-test,Java,Spring Boot,Mockito,Spring Test,我有一个配置类,它使用加载库(这很好) 不幸的是,当使用@MockBean时,它会强制刷新上下文缓存。 我不知道为什么,但我不能运行两次NativeLoader.loadLibrary(“我的库”),因为我得到了FileNotFoundException:进程无法访问该文件,因为另一个进程正在第二次使用它 如何使配置在测试期间运行一次,或使NativeLoader加载我的库两次?尝试延迟加载,以便仅在真正需要时(即在调用其某些方法之前)才有效加载库 1) 根据逻辑的复杂性,将bean定义为@La

我有一个配置类,它使用加载库(这很好)

不幸的是,当使用
@MockBean
时,它会强制刷新上下文缓存。 我不知道为什么,但我不能运行两次
NativeLoader.loadLibrary(“我的库”)
,因为我得到了
FileNotFoundException:进程无法访问该文件,因为另一个进程正在第二次使用它


如何使配置在测试期间运行一次,或使NativeLoader加载我的库两次?

尝试延迟加载,以便仅在真正需要时(即在调用其某些方法之前)才有效加载库

1) 根据逻辑的复杂性,将bean定义为@Lazy可能会有所帮助

2) 如果不是这样,手动实现延迟加载可能会有所帮助。例如,您可以使用仅在第一次调用其方法之一时才会加载库的代理


3) 可能需要对应用程序的逻辑进行一些修改,以推迟使用加载库的代码。

尝试延迟加载,以便只有在真正需要时,即在调用库的某些方法之前,才有效地加载库

1) 根据逻辑的复杂性,将bean定义为@Lazy可能会有所帮助

2) 如果不是这样,手动实现延迟加载可能会有所帮助。例如,您可以使用仅在第一次调用其方法之一时才会加载库的代理


3) 可能需要对应用程序的逻辑进行一些修改,以推迟使用加载库的代码。

而不是将
NativeLoader.loadLibrary(“我的库”)
挂接到spring的生命周期钩子中。我使用了静态上下文

静态{
试一试{
NativeLoader.loadLibrary(“我的库”)
}捕获(IOEX异常){
抛出新异常InInitializeRerror(ex);
}
}
主要是使用为这种静态上下文初始化而构建的


因此,当使用
@MockBean
时,spring确实会在每个测试中运行
@PostConstruct
(因为它应该从模拟组件中清除应用程序上下文),但库的加载只发生一次

我使用静态上下文,而不是将
NativeLoader.loadLibrary(“我的库”)
挂接到spring的生命周期钩子中

静态{
试一试{
NativeLoader.loadLibrary(“我的库”)
}捕获(IOEX异常){
抛出新异常InInitializeRerror(ex);
}
}
主要是使用为这种静态上下文初始化而构建的

因此,当使用
@MockBean
时,spring确实会在每个测试中运行
@PostConstruct
(因为它应该从模拟组件中清除应用程序上下文),但库的加载只发生一次