我试图在测试类中使用Spring的autowire注释,以便注入类的实例。
package com.mycom.mycust.processing.tasks.references;
public class ReferenceIdentifierTest {
@Autowired
private FormsDB formsDB;
@PostConstruct
@Test
public void testCreateTopLevelReferencesFrom() throws Exception {
ReferenceIdentifier referenceIdentifier = new ReferenceIdentifier(formsDB);
}
}
这是FormsDB类:
package com.mycom.mycust.mysql;
import org.springframework.stereotype.Component;
import java.sql.SQLException;
@Component
public class FormsDB extends KeyedDBTable<Form> {
public FormsDB(ConnectionFactory factory) throws SQLException {
super(factory.from("former", new FormsObjectMapper()));
}
}
这是SpringBootApplication类:
package com.mycom.mycust.processing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan("com.mycom.mycust")
public class Processing implements CommandLineRunner {
// Code
}
运行测试时,formsDB
为空。由于我在测试函数上使用了PostConstruct
批注,因此我认为由于找不到该类,因此无法自动装配FormsDB。测试类Autowired
的{{1}}注释上还有一个IntelliJ警告。但是我将Autowired members must be defined in valid Spring bean (@Component|@Service...)
注释放在了Component
类的上方,并且还将路径FormsDB
放在了SpringBootApplication的com.mycom.mycust
注释中。所以我看不到为什么找不到课程。
这是怎么了?
答案 0 :(得分:3)
您的测试调用缺少一些使自动装配工作的重要注释:
@SpringBootTest
@RunWith(SpringRunner.class)
public class ReferenceIdentifierTest {
@Autowired
private FormsDB formsDB;
@Test
public void testCreateTopLevelReferencesFrom() throws Exception {
ReferenceIdentifier referenceIdentifier = new ReferenceIdentifier(formsDB);
}
}
您还可以删除在测试中没有意义的@PostConstruct。