在学习了JUnit并经历了它对程序员和项目的好处之后,我现在想对每个实体的服务层进行单元测试,并测试每种方法是否正常工作。
到目前为止,我已经为所有服务类创建了单元测试,但是问题是数据源的数据不适合测试。因此,我必须创建另一个用于服务层测试的数据库,并配置数据源以用于服务层的单元测试。但是问题是我不知道如何配置另一个数据源,该数据源只能src/test/java
在生产时访问,而不能在生产时访问。我还是SpringBoot和SpringData的新手,所以我在这里问如何配置这样的要求。
截至目前,我已经有了此application.properties
配置。
spring.datasource.url=<DatabaseURL>
spring.datasource.username=<DatabaseUsername>
spring.datasource.password=<DatabasePassword>
spring.datasource.driver-class-name=<DatabaseDriver>
// another datasource configuration
这是服务类的示例代码。使用哪个application.properities - dataSource
配置。
@Service
public class FooService {
@PersistenceContext
private EntityManager entityManager;
public List<Foo> findAllByFooForm(FooForm fooForm) {
// JPA CriteriaBuilder query accroding to FooForm
return entityManager.createQuery(query).getResultList();
}
}
最后,这是用于服务类的单元测试的示例代码。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class FooServiceTest {
@AutoWired
private FooService fooService
@Test
public void testFindAllByFooForm() {
// Test statements
}
}
有几种方法可以组合使用,以使您对此有良好的控制。
首先,如果您创建src/test/resources/application.properties
,则仅在测试期间在类路径上可用。它将覆盖您在中定义的所有属性src/main/resouces/application.properties
。
如果您使用内存数据库来支持这些测试,则可以import.sql
通过使用以下属性来确保加载了不同的文件:
spring.jpa.properties.hibernate.hbm2ddl.import_files=import-test1.sql
该注释采用逗号分隔的导入脚本列表,因此您可以使一个脚本加载基本数据集,并由其他脚本加载其他(也许是特定于测试的)数据。
如果您希望在每个测试中连接到不同的数据库,或导致使用不同的导入脚本,则可以使用概要文件来触发此操作。如果创建属性文件application-test1.properties
,则测试本身可以使用注释来加载该文件@ActiveProfiles({"test1"})
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句