如何解决如何模拟 @Resource ? .场景使用@Resource 来防止@Cacheable 在从同一 bean 的另一个方法调用时被绕过
我有一个场景,我在服务层中有 @Cacheable 注释。此类的一种方法是调用另一种方法,后者同时具有 @Cacheable 注释。由于我使用的是 Spring AOP,因此每当 createSphereClientA 调用 createSphereClientB 时,@Cacheable 都会被忽略,因为没有代理。我在这里阅读 Spring Cache @Cacheable - not working while calling from another method of the same bean 并使用 @Resource,因为我使用的是 Springboot 2.2.5。
我不想使用 AspectJ,因为它只发生在一个类中。
@服务 公共类 CacheableSphereClientFactoryImpl 实现 SphereClientFactory {
/**
* 1. Self-autowired reference to proxified bean of this class.
*/
@Resource
private SphereClientFactory self;
@Autowired
public CacheableSphereClientFactoryImpl(CacheablePolicyDao cacheablePolicyDao,UserCustomPolicyDao userCustomPolicyDao,UserAPI userAPI,PolicyMessages policyMessages,PolicyRepository policyRepository,Validator validator) {
this.cacheablePolicyDao = cacheablePolicyDao;
this.userCustomPolicyDao = userCustomPolicyDao;
this.userAPI = userAPI;
this.policyMessages = policyMessages;
this.policyRepository = policyRepository;
this.validator = validator;
}
@Override
@Cacheable(sync = true)
public SphereClient createSphereClientA(@Nonnull TenantConfig tenantConfig) {
// 2. call cached method using self-bean
return self.createSphereClient(tenantConfig.getSphereClientConfig());
}
@Override
@Cacheable(sync = true)
public SphereClient createSphereClientB(@Nonnull SphereClientConfig clientConfig) {
return userAPI.createSphereClient(clientConfig);
}
......... //Some more methods
}
代码运行良好!。现在我正在努力为 createSphereClientA 函数编写 JUnit。 我无法模拟 SphereClientFactory 。
我正在使用
Mockito Version : 3.3.0
PowerMock Version : 2.0.5
我尝试了各种方法,例如使用下面的方法并使用 MockitoJUnitRunner 运行
@Mock SphereClientFactory 自身 或 PowerMocking 对象并在 powermockrunner 上运行但没有任何效果:(。每次我收到 NullPointerException 时,因为 SphereClientFactory 实际上从未被这两种方法模拟过。
任何人都知道我该怎么做? 另外上面的方案会不会产生循环依赖?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。