java - 如何在Junit的spring boot中访问用@Mock初始化的静态变量
问题描述
我有以下组件类。
@Component
class ComponentClass{
private static AnotherClass anotherClass;
@Autowired
private void setAnotherClass(AnotherClass a){
anotherClass = a;
}
public AnotherClass getAnotherClass(){
return anotherClass;
}
}
@RunWith(MockitoJUnitRunner.class)
public class ComponentClassTest {
@InjectMocks
private ComponentClass componentClass;
@Mock
private AnotherClass anotherClass;
@Test
public void testGetAnotherClass() {
Assert.assertNotNull(ComponentClass.getAnotherClass());
}
}
当我尝试运行测试用例时,getAnotherClass 方法返回 null。任何人都可以在这里帮助为什么 getAnotherClass 方法调用没有返回模拟实例。
解决方案
扩展@m-deinum:示例有一个带有非静态设置器的静态字段。由于许多原因(包括 Mockito 不会触摸它),这是一种不好的做法。默认情况下,Spring 会确保 AnotherClass 是单例,所以我建议通过构造函数参数来设置它。Spring 和 Mockito 都会对此感到满意。
private final AnotherClass anotherClass;
public ComponentClass(AnotherClass anotherClass) {
this.anotherClass = anotherClass;
}
推荐阅读
- python - Flask-SQLAlchemy:sqlite3 IntegrityError
- sonarqube - 如何在 sonarqube 商业广告中停用规则?
- google-apps-script - 循环条件格式。
- bash - 通过 npm run 将参数传递给 bash 脚本
- pytorch - pytorch where is Embedding "max_norm" implemented?
- java - 发送没有身份验证/没有发件人密码的 java 电子邮件
- css - 增加文本框的大小
- hyperledger-fabric - 了解 Hyperledger Fabric 设置
- python - 使用编码的 unicode 对象加载 json
- bash - 似乎入口点和 shell 形式的 cmd 都是单独执行的