0

我现在有一个恼人的问题。由于自动接线,我的测试失败了。

无法自动装配字段:私有 k.dao.CompanyDao k.dao.CompanyDaoTest.companyDao;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为 [k.dao.CompanyDao] 的匹配 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。

我认为@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() {

    }
}

公司道

public interface CompanyDao extends GenericDao<Company> {

}

公司DaoJpa

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

    public CompanyDaoJpa() {
        super(Company.class);
    }
}

通用道

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);

}

servlet-context.xml

    <annotation-driven />

    <context:component-scan base-package="k"/>
4

1 回答 1

5

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

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

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

<init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:**/servlet-config.xml</param-value>
</init-param>
于 2011-11-17T10:49:25.160 回答