我希望Spring Boot使用应用程序数据库旁边的MySQL测试数据库进行集成测试。目前,它自动使用H2数据库,因为我在Gradle中添加了H2依赖。
例如,此测试现在使用H2数据库运行,我希望它使用物理辅助数据库。
import org.junit.Test;
import org.junit.runner.RunWith;
import org.observer.media.model.MediaGroup;
import org.observer.media.repository.MediaGroupRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MediaGroupServiceTest {
@Autowired
private MediaGroupService mediaGroupService;
@Autowired
private MediaGroupRepository mediaGroupRepository;
@PersistenceContext
private EntityManager entityManager;
private MediaGroup mediaGroup = new MediaGroup("name", "ceo", "owner");
@Test
public void save() {
MediaGroup entity = mediaGroupService.saveNew(mediaGroup);
assertThat(mediaGroupRepository.findByName(mediaGroup.getName())).isEqualTo(entity);
}
}
答案 0 :(得分:5)
我在/ src / main / java / resources中有application.properties,并为主应用程序配置了数据源。
我将带有数据源配置的application-test.properties添加到/ src / test / java / resources到数据库进行测试。另外,我在应该使用该数据库的测试中添加了@ActiveProfiles("test")
。请注意,Spring使用application-test.properties和注释中的单词test进行自我配置。因此,Spring"覆盖" application.properties的配置。
application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/database
spring.datasource.username=user
spring.datasource.password=secret
spring.datasource.driverClassName=com.mysql.jdbc.Driver
application-test.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/database_test
spring.datasource.username=user
spring.datasource.password=secret
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
答案 1 :(得分:2)
虽然这个问题已经有了答案。
如果您想测试JPA应用程序,我们也可以使用@DataJpaTest
。默认情况下,它将配置内存中的嵌入式数据库,扫描@Entity类并配置Spring Data JPA存储库。常规的@Component bean不会加载到ApplicationContext中。
这是在春季启动应用程序中进行的测试改进之一。
阅读文档:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html
答案 2 :(得分:0)
在测试中默认使用内存数据库。您可以禁用该行为并让它使用应用程序配置的数据库,将注释 @AutoConfigureTestDatabase(replace = Replace.NONE)
添加到您的测试中(请参阅 Auto-configured Data JPA Tests)。
然后,您可以添加 application.properties
或等效于 src/test/resources
或单独的应用程序文件,例如 application-test.properties
,并通过使用 @ActiveProfiles("test")
对其进行注释来使测试使用它。