#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 еще больше.