我必须调整我一直在努力工作的项目,使用注入的对象(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) {
答案 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是可行的方式