首页 > 解决方案 > 如何在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 方法调用没有返回模拟实例。

标签: javaspringspring-boot

解决方案


扩展@m-deinum:示例有一个带有非静态设置器的静态字段。由于许多原因(包括 Mockito 不会触摸它),这是一种不好的做法。默认情况下,Spring 会确保 AnotherClass 是单例,所以我建议通过构造函数参数来设置它。Spring 和 Mockito 都会对此感到满意。

private final AnotherClass anotherClass;
public ComponentClass(AnotherClass anotherClass) {
  this.anotherClass = anotherClass;
}

推荐阅读