Java 用于DAO JUnit测试的SpringBootTest
我正在尝试以下DAO的单元测试 我无法识别数据源 我可以得到如何解决这个问题的提示吗 详情如下Java 用于DAO JUnit测试的SpringBootTest,java,spring-boot,junit,Java,Spring Boot,Junit,我正在尝试以下DAO的单元测试 我无法识别数据源 我可以得到如何解决这个问题的提示吗 详情如下 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public class EntityDaoTest { @Autowired protected EntityDao entityDao; @Before public void setup() { } @Test
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class EntityDaoTest {
@Autowired
protected EntityDao entityDao;
@Before
public void setup()
{
}
@Test
public void test() throws InternalServerException
{
List<Entity> entities = entityDao.list();
assert(entities.size()==0);
}
}
在Eclipse中作为JUnit测试运行的跟踪
java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityController': Unsatisfied dependency expressed through field 'entityDao': Error creating bean with name 'entityDao' defined in file .../target/classes/hitstpa/dao/EntityDao.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type [javax.sql.DataSource] found for dependency [javax.sql.DataSource]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {};
...
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityDao' defined in file [/home/fmason/workspace/hitstpa/target/classes/hitstpa/dao/EntityDao.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type [javax.sql.DataSource] found for dependency [javax.sql.DataSource]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] found for dependency [javax.sql.DataSource]: expected at least 1 bean which qualifies as autowire candidate for this dependency. ...`
应用程序结构
-src
--主要
---爪哇
----Application.java
----com
----希斯特帕
-----控制器
-----刀
------EntityDao.java
-----模型
---资源
----应用程序属性
--试验
---爪哇
----希斯特帕
-----刀
------EntityDaoTestDOTjava
---资源
----applicationDOTproperties我认为这不是一个好的单元测试。此测试要求本地主机上存在mysql数据库
无论如何,这些错误表明Spring上下文没有正确加载。当使用
SpringBootTest
时,Spring使用测试包作为根查找配置。因此,如果它比您的配置类的低
,它就不会影响它们
看看:
搜索算法从包含测试的包开始工作
直到找到@SpringBootApplication或@SpringBootConfiguration
注释类。只要您以合理的方式构造代码
您的主配置通常是如何找到的
解决方案:
您可以将测试移动到与SpringBoot主类相同的级别,也可以将其更改为:
@SpringBootTest(classes=YourSpringBootMainClass.class)
我认为这不是一个好的单元测试。此测试要求本地主机上存在mysql数据库
无论如何,这些错误表明Spring上下文没有正确加载。当使用
SpringBootTest
时,Spring使用测试包作为根查找配置。因此,如果它比您的配置类的低
,它就不会影响它们
看看:
搜索算法从包含测试的包开始工作
直到找到@SpringBootApplication或@SpringBootConfiguration
注释类。只要您以合理的方式构造代码
您的主配置通常是如何找到的
解决方案:
您可以将测试移动到与SpringBoot主类相同的级别,也可以将其更改为:
@SpringBootTest(classes=YourSpringBootMainClass.class)
首先,对于集成测试,您需要一个带有一些固定数据的集成数据库
- 现在您需要创建一个配置类,该类将创建
集成测试特定依赖项(我将其命名为
)DbConfig .java
- 接下来是向集成测试添加
注释 类并提供@ContextConfiguration
,以便在测试运行时 创建DbConfig.java
依赖项并将其注入容器数据源
@Configuration
public class DbConfig {
@Bean
public DataSource dataSource() {
//Create the DataSource with integration-DB properties
return dataSource;
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@ContextConfiguration(classes=DbConfig.class)
public class EntityDaoTest {
}
首先,对于集成测试,您需要一个带有一些固定数据的集成数据库
- 现在您需要创建一个配置类,该类将创建
集成测试特定依赖项(我将其命名为
)DbConfig .java
- 接下来是向集成测试添加
注释 类并提供@ContextConfiguration
,以便在测试运行时 创建DbConfig.java
依赖项并将其注入容器数据源
@Configuration
public class DbConfig {
@Bean
public DataSource dataSource() {
//Create the DataSource with integration-DB properties
return dataSource;
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@ContextConfiguration(classes=DbConfig.class)
public class EntityDaoTest {
}
我同意这不是一个好的单元测试——只是暂时尝试设置。我在SpringBootTest注释中添加了classes属性,行为没有改变。关于上面添加的应用程序结构的更多信息一致认为这不是一个好的单元测试-只是暂时尝试设置。我将classes属性添加到SpringBootTest注释中,行为没有改变。关于这些步骤上面添加的应用程序结构的更多信息也让我走得更远——需要一些内部修复——需要添加tomcat jdbc依赖关系——需要在我的所有DAO上声明零参数构造函数。-在我解决了这些初始问题之后,这帮助我进入了下一个阶段。这些步骤也让我走得更远一些——需要一些内部修复程序——需要添加tomcat jdbc依赖项——需要在所有DAO上声明零参数构造函数在我解决了这些最初的问题之后,这帮助我进入了下一个阶段
@Configuration
public class DbConfig {
@Bean
public DataSource dataSource() {
//Create the DataSource with integration-DB properties
return dataSource;
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@ContextConfiguration(classes=DbConfig.class)
public class EntityDaoTest {
}