未注入jUnit测试的Bean

时间:2018-08-01 13:47:41

标签: java spring

我对正确的Spring Beans配置有疑问。我的整个应用程序都可以在Spring上正常工作,我想添加jUnit测试。不幸的是,豆子注射不正确。 我在同一模块中有两个目录。 我的整个应用都在里面:

/ src / main / java / main /

它可以正常工作,我添加了RestTest.java和BeanTestConfiguration.java 内部:

/ src / test / java / main /

@SpringBootTest
@RunWith(Spring.Runner.class)
@ContextConfiguration(classes=BeanTestConfiguration.class)
class RestTest {

    @Autowired
    public String testString;


    @Test
    public void send() {
        System.out.println(testString);
        Assert.assertNotNull(testString);
    }
}

并配置BeanTestConfiguration

@Configuration
public class BeanTestConfiguration {
    @Bean
    public String testString() { return new String("Hello"); }
}

不幸的是,当我在发送方法System out上运行测试时,输出为null,并且Assert throws失败。 我在IntelliJ内部的项目结构中添加了Spring Application Context

2 个答案:

答案 0 :(得分:1)

由于您的测试类和方法是程序包私有的,因此我假设您正在使用jUnit 5。 在jUnit 5中,应该使用@ExtendWith注释而不是@RunWith。特别是SpringExtension

  

通过使用@ExtendWith(SpringExtension.class)注释测试类,开发人员可以实现基于JUnit Jupiter的标准单元测试和集成测试,并同时获得TestContext框架的好处,例如支持加载应用程序上下文,对测试实例进行依赖注入,事务性测试方法执行,等等。

https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-junit-jupiter-extension

例如

@SpringBootTest
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes=BeanTestConfiguration.class)
class RestTest {

    @Autowired
    public String testString;


    @Test
    void send() {
        System.out.println(testString);
        Assert.assertNotNull(testString);
    }
}

答案 1 :(得分:0)

谢谢大家的帮助。我发现进口有问题。我的@Test注释来自jUnit 5,而我的内部却有SpringRunner注释,该注释来自jUnit 4,结果是Spring无法正常工作并且没有注入bean。

再一次感谢大家。