试图将对象注入JUnit测试

时间:2015-04-02 14:59:34

标签: java spring junit

我必须调整我一直在努力工作的项目,使用注入的对象(documentDao)来访问添加/更新/ etc的方法。数据库中的记录。必要时我只是将这个对象注入到构造函数中,但是当然这不适用于JUnit测试(它只能有无参数构造函数),所以我一直坚持如何将对象引入测试类。 / p>

第一个代码段显示了其中一个测试类的简化版本。问题是我需要创建documentDao对象,以便将其作为参数传递给BackendApiController实例化语句。

第二个片段是DocumentDaoImpl类的第一部分,需要注入。

欢迎任何建议。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
public class ApiBackendTests {

    @Configuration
    @PropertySource(value = "classpath:system.properties")
    static class ContextConfiguration {
    }

    private static BackendApiController backendApiController = new BackendApiController(documentDao);

@Test
    public void retrieveSampleStatementList() {

        String response = backendApiController.genericStatementList(x,y,z);

        String eStatementId = "";

        if (response.indexOf("_id") > 0) {

            eStatementId = response.substring(response.indexOf("<_id>") + 5, response.indexOf("</_id>"));
        }

        // if this test is true, then at least one statement document was found in the above search.
        assertTrue(response.indexOf("_id") > 0);
    }
}




@Repository
public class DocumentDaoImpl<T> implements DocumentDao<T> {

    public DocumentDaoImpl() {
    }

    @Inject
    DBCollection dbCollection;

    @Inject
    GridFS gridFS;

    @Autowired
    ObjectMapper objectMapper;

    @Override
    public String insert(CommonDocument document) {

1 个答案:

答案 0 :(得分:0)

仍然没有足够的信息可以肯定地说出任何内容,但我相信您可以尝试使用@Autowired连接所需的组件:

@Autowired
private DocumentDao documentDao;

你收到了错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.roler.res.test.ApiBackendTests': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.roler.res.mongodb.dao.DocumentDao

这意味着Spring还没有意识到DocumentDao bean。有几种方法可以做到这一点,但我认为最简单的方法是将它放在配置上下文中:

<context:component-scan base-package="package.contain.your.dao"/>

它将告诉Spring扫描包以搜索带注释的组件。

更新:由于您不使用XML配置,@ComponentScan是可行的方式