未在 Junits 中注入的嵌套自动装配依赖项

Nested Autowired Dependencies not injected in Junits

下面是演示问题的代码。 Class3 具有自动装配字段 Class2,Class2 具有 Class1 的自动装配依赖项,使用 Class3 获取 Class1 的 String 值的 simpleTest。所以在测试执行中Class2不为null并被注入到Class3中,但是Class1在Class2中为null。

@Component
 class Class1{
 private String str= "Some String";
 //getter setter
}

@Component
class Class2{

@Autowired
Class1 class1;
//getter setter
}

@Component
class Class3{

@Autowired
Class2 class2;
 //getter setter
}

public class TestClass{

@InjectMocks
Class3 class3;

@Spy
Class2 class2;

@Spy
Class1 class2;

    @Test
    public void simpleTest(){
    
    String s = class3.class2.class1.getStr();
    Assert.equals(s,"Some String");
    
    }
}

这是因为您在 Class2 上添加了 @Spy 注释,它使 Class2 成为模拟对象而不是有效的 Spring bean。

如果你想在此处获取 Spring 的 DI,你必须使用 @Autowired 获取你的 bean,也许还需要放置

@RunWith(SpringRunner.class)
@SpringBootTest

检查您的测试,使其使用实际上下文。

以下解决了问题。

    @InjectMocks
    @Spy
    Class2 class2;