Получение значения null в качестве jdbctemplate при тестировании бд с помощью JdbcTest

#java #spring-boot #junit #jdbctemplate

Вопрос:

Я пытаюсь протестировать вызов бд с базой данных h2, но шаблон jdbc оказывается нулевым. Я уже настроил application-testing.properties и установил среду в eclipse как активную для этого этого свойства.

 import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.jdbc.Sql;
// 

@Sql({ "schema.sql", "test-data.sql" })
@JdbcTest
public class DbTest {

    @Autowired
    private JdbcTemplate jdbcTemplateRead;

    @Test
    public void testTheDatabase() {
        // PDao paymentDao = new PDao();
        // paymentDao.setJdbcTemplateRead(jdbcTemplateRead);
        // User user = paymentDao.getUser(0l);
        // assertThat(user.getPlatForm()).isEqualTo(5);
    }
}
 

тестирование приложений.свойства

 spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
 

Получение этого исключения

 java.lang.NullPointerException
    at com.til.gaana.user.api.service.impl.DbTest.testTheDatabase(DbTest.java:26)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:542)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
 

Версия пружинной загрузки
2.0.4.ВЫПУСК

pom.xml

     <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-test</artifactId>  
        <scope>test</scope> 
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions> 
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.8.1</version><!--$NO-MVN-MAN-VER$-->
        <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-engine</artifactId>
        <version>1.8.1</version>
    </dependency>
    <!-- 1.8.1 junit-platform-engine -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.24.0</version><!--$NO-MVN-MAN-VER$-->
        <scope>test</scope>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-junit-jupiter</artifactId>
        <version>3.12.4</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.8.1</version><!--$NO-MVN-MAN-VER$-->
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-params</artifactId>
        <version>5.8.1</version><!--$NO-MVN-MAN-VER$-->
        <scope>test</scope>
    </dependency>
    <dependency>
  <groupId>net.bytebuddy</groupId>
  <artifactId>byte-buddy</artifactId>
  <version>1.9.10</version><!--$NO-MVN-MAN-VER$-->
</dependency>
<dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
</dependency>
 

Комментарии:

1. Вы, несмотря на зависимости JUnit 5, используете JUnit 4. Поэтому либо используйте @Test аннотацию JUnit 5, либо добавьте @RunWith(SpringRunner.class) ее в свой класс.

2. Вы должны удалить все зависимости Junit. И я бы также рекомендовал обновить до самой последней версии Spring Boot

3. @M. Deinum Когда я пытаюсь использовать junit 5 @ Test , я получаю то же исключение нулевого указателя, а когда я пытаюсь, @ RunWith(SpringRunner.class) я получаю java.lang. Исключение IllegalStateException: Не удалось загрузить текст приложения в org.springframework.test.context.cache. DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125) в org.springframework.тест.контекст.поддержка. DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)…………..

4. Итак, вы используете JUnit 4, и ваша конфигурация заблокирована. Пожалуйста, не добавляйте дополнительный код/ошибки в качестве комментариев, так как они совершенно нечитабельны.

5. Для начала используйте только зависимости junit5 и тот факт, что у вас есть эти исключения (почему, они уже являются частью spring-boot-starter-test ), и вы возитесь с версиями. Этот последний факт заставляет меня задуматься, не путаетесь ли вы с maven еще больше.