我有下面的组件类。

 @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;
}

10-07 23:39