春天3 @Autowire参加测试

Kro*_*nis 0 java spring-test spring-3

我现在有一个恼人的问题.我的测试因autowire而失败.

无法通过autowire字段:private k.dao.CompanyDao k.dao.CompanyDaoTest.companyDao; 嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为[k.dao.CompanyDao]的匹配bean:期望至少有一个bean可以作为此依赖项的autowire候选者.

我觉得@ContextConfiguration可以是问题吗?

考试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:**/servlet-context.xml", "classpath:**/root-context.xml", "classpath:**/ccc-jpa.xml" })
public final class CompanyDaoTest {

    @Autowired
    private CompanyDao companyDao;

    @Test
    public void testTest() {

    }
}
Run Code Online (Sandbox Code Playgroud)

CompanyDao

public interface CompanyDao extends GenericDao<Company> {

}
Run Code Online (Sandbox Code Playgroud)

CompanyDaoJpa

@Repository("companyDao")
public class CompanyDaoJpa extends GenericDaoJpa<Company> implements CompanyDao {

    public CompanyDaoJpa() {
        super(Company.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

GenericDao

public interface GenericDao<T extends DomainObject> {

    public T get(Long id);

    public List<T> getAll();

    public T save(T object);

    public T delete(T object);

}
Run Code Online (Sandbox Code Playgroud)

servlet的context.xml中

    <annotation-driven />

    <context:component-scan base-package="k"/>
Run Code Online (Sandbox Code Playgroud)

axt*_*avt 5

我想你的测试根本没有加载servlet-context.xml.

您引用servlet-context.xml为类路径资源,但servlet-context.xml通常位于下面WEB-INF,它不是应用程序类路径的一部分.请注意,当Spring使用通配符(classpath:**/servlet-context.xml)引用时,Spring不会抱怨丢失配置文件,因此即使找不到配置文件,您的测试也会以静默方式启动.

没有很好的方法可以访问位于WEB-INF单元测试中的Spring xml文件.如果要对它们运行测试,则需要将它们移动到类路径(即类似于src或者resources,取决于您的项目布局).由于DispatcherServletContextLoaderListener希望在下面找到这些文件WEB-INF,您还需要使用各自的contextConfigLocation参数重新配置它们.例如,在以下情况下DispatcherServlet:

<init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:**/servlet-config.xml</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)