我有下面的组件类。
@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;
}