Тест Spring MockMVC с использованием другого источника данных - PullRequest
0 голосов
/ 18 октября 2018

Я много искал, но мне не повезло.Проблема в том, что я использую MockMvcBuilders.webAppContextSetup(wac).build() в своем тестовом классе, чтобы вызвать поддельную версию моего настоящего приложения Spring Boot.Однако, так как я выполняю транзакции БД в служебной части моего приложения SB, я бы хотел использовать источник данных H2 в памяти для своих тестов (дух!).

Были предложенияпереопределить файл application.properties, создав копию и поместив ее в папку src/test/resources (переопределив переменные источника данных).Я сделал это в сочетании со следующим фрагментом кода в моем тестовом классе:

@RunWith(SpringRunner.class)
@WebAppConfiguration("classpath:META-INF/web-resources")
@ContextHierarchy({ @ContextConfiguration(classes = Application.class) })
public class ApplicationSvcTests {

    private MockMvc mockMvc;

    @Autowired
    private WebApplicationContext wac;          

    @Autowired
    private CrudRepo crudRepo;

    static boolean initialized = false;     

    @Before
    public void setup() throws Exception {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();

        if (!initialized) {
            populateDB(crudRepo);  // calling the backend service to save to DB
            initialized = true;
        }       
    }

, а мой файл application.properties, расположенный в папке src/test/resources, содержит следующее:

logging.level.org.springframework.web.filter.CommonsRequestLoggingFilter=DEBUG
spring.jackson.serialization.indent-output=true
server.port = 8080
# ===============================
# = DATA SOURCE
# ===============================
# Set here configurations for the database connection
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa

# ===============================
# = JPA / HIBERNATE
# ===============================
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
# Naming strategy
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

# Allows Hibernate to generate SQL optimized for a particular DBMS
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

Несмотря на это, тестовый костюм все еще пытается подключиться к исходному источнику данных, определенному в папке application.properties in src/main/resources, таким образом осуществляя транзакцию с реальной БД.

Как я могу решить эту проблему?

...