我试图在测试类中使用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
中的Autowired members must be defined in valid Spring bean (@Component|@Service...)
注释上也有IntelliJ警告。但是我已经将Component
注释放在FormsDB
类之上,并且还将路径com.mycom.mycust
放在SpringBootApplication的ComponentScan
注释中。所以我看不出为什么找不到课程。怎么了
最佳答案
您的测试调用缺少一些重要的注释来使自动装配工作:
@SpringBootTest
@RunWith(SpringRunner.class)
public class ReferenceIdentifierTest {
@Autowired
private FormsDB formsDB;
@Test
public void testCreateTopLevelReferencesFrom() throws Exception {
ReferenceIdentifier referenceIdentifier = new ReferenceIdentifier(formsDB);
}
}
您也可以删除在测试中没有意义的@PostConstruct。