我希望Sping 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);
}
}
3条答案
按热度按时间hjzp0vay1#
我application.properties在/src/main/java/resources中有www.example.com,其中有主应用程序的数据源配置。
我将www.example.com添加application-test.properties到/src/test/java/resources中,并将数据源配置添加到数据库中进行测试,此外,我还将
@ActiveProfiles("test")
添加到应该使用该数据库的测试中。请注意,Spring在www.example.com和注解中使用单词test来配置自己application-test.properties,因此,Spring覆盖了application.properties的配置。
application.properties:
application-test.properties:
pbossiut2#
尽管这个问题已经有了答案。
如果你想测试JPA应用程序,我们也可以使用
@DataJpaTest
。默认情况下,它会配置一个内存嵌入式数据库,扫描@Entity类并配置Spring Data JPA存储库。常规的@Component bean不会加载到ApplicationContext中。这是在 Spring Boot 应用中所做的测试改进之一。
读取文档:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html
lsmepo6l3#
默认情况下,测试中使用内存中的数据库。您可以禁用该行为,并让它使用应用程序配置的数据库,将注解
@AutoConfigureTestDatabase(replace = Replace.NONE)
添加到测试中(请参见自动配置数据JPA测试)。然后,您可以添加一个
application.properties
或等同于src/test/resources
的文件,或者添加一个单独的应用程序文件(如application-test.properties
),并通过使用@ActiveProfiles("test")
对其进行注解来使测试使用它。