使用 JUnit 进行单元测试时,Spring 不会自动布线

2022-08-31 14:12:18

我用JUnit测试了以下DAO:

@Repository
public class MyDao {

    @Autowired
    private SessionFactory sessionFactory;

    // Other stuff here

}

如您所见,会话网站是使用Spring自动布线的。当我运行测试时,sessionFactory 保持 null,并且我得到一个 null 指针异常。

这是春季的会话工厂配置:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
    <property name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${jdbc.dialect}</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

怎么了?如何为单元测试启用自动布线?

更新:我不知道这是否是运行JUnit测试的唯一方法,但请注意,我在Eclipse中运行它,右键单击测试文件并选择“运行方式”->“JUnit test”


答案 1

将类似如下的内容添加到根单元测试类中:

@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration

这将使用默认路径中的 XML。如果需要指定非默认路径,则可以向 ContextConfiguration 批注提供位置属性。

http://static.springsource.org/spring/docs/2.5.6/reference/testing.html


答案 2

我在Spring Boot 2.1.1和JUnit 4
中遇到了同样的问题,只是添加了这些注释:

@RunWith( SpringRunner.class )
@SpringBootTest

一切都很顺利。

对于 Junit 5:

@ExtendWith(SpringExtension.class)


推荐