title: Spring Test Wants To Connect to Database
body: <p>I am trying to write some tests for my application and encountered following problem:
  I defined a application-test.yml with folling content:</p>
  <pre><code>server:
    port: 8085
  
  spring:
      security:
          oauth2:
              resourceserver:
                  jwt:
                      # change localhost:8081 with container name
                      issuer-uri: http://localhost:8081/auth/realms/drivingschool
                      jwk-set-uri: http://localhost:8081/auth/realms/drivingschool/protocol/openid-connect/certs
  
  keycloak:
      realm: drivingschool
      auth-server-url: http://localhost:8081/auth
      ssl-required: external
      resource: client-interface
      use-resource-role-mappings: true
      credentials:
          secret: xxx
      bearer-only: true
  </code></pre>
  <p>My test class:</p>
  <pre class="lang-java prettyprint-override"><code>@RunWith(SpringRunner.class)
  @SpringBootTest
  @AutoConfigureMockMvc
  @ActiveProfiles(&quot;test&quot;)
  public class StudentControllerTests {
  
      @Autowired
      private MockMvc mockMvc;
  
      @Autowired
      private StudentService service;
  
      @MockBean
      private StudentRepository repository;
  
      @Test
      public void contextLoads(){}
  //more tests
  }
  </code></pre>
  <p>the test all pass green BUT in the log i can see, that my app tries to connect to a database configured in my (basic) application.yml.</p>
  <pre><code>ava.sql.SQLNonTransientConnectionException: Could not connect to address=(host=localhost)(port=9005)(type=master) : Socket fail to connect to host:localhost, port:9005. Verbindungsaufbau abgelehnt (Connection refused)
      at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:73) ~[mariadb-java-client-2.6.1.jar:na]
      at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:192) ~[mariadb-java-client-2.6.1.jar:na]
  </code></pre>
  <pre><code>jpa:
        database-platform: org.hibernate.dialect.MariaDBDialect
        hibernate:
          use-new-id-generator-mappings: false
          ddl-auto: create
  
      datasource:
        url: jdbc:mariadb://localhost:9005/waterloo
        username: waterloo
        password: xxx
        driver-class-name: org.mariadb.jdbc.Driver
  </code></pre>
  <p>when creating a application-prod.yml and moving all content from application.yml to application-prod.yml it tells me I have to configure a datasource URL</p>
  <pre><code>Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
  </code></pre>
  <p>I have the following questions:</p>
  <ol>
  <li>Do the application.yml files get layered (*-test.yml  settings on top of application.yml)?</li>
  <li>Why does Spring try to build a connection to my database when I am not setting a datasource on my application-test.yml AND mocking the repository on the test?</li>
  <li>Is it normal that Spring trys to establish a connection at this part?
  3.1) If not: How to i prevent it from doing so?</li>
  </ol>
  <p>Thanks and kind regards!</p>