Миграция с JUnit4 на JUnit5 создает исключение NullPointerException в @Autowired репозиториях - PullRequest
0 голосов
/ 28 февраля 2019

У меня очень простой тест репозитория, он прекрасно работает, когда я использую JUnit's 4 "@RunWith (SpringRunner.Class)".Когда я пытался использовать «@ExtendWith», как в приведенном примере, я получаю исключение NullPointerException при попытке работать с хранилищем.Кажется, что @Autowire не внедряет репозиторий при использовании последней аннотации.Вот файл pom.xml и трассировка стека: https://pastebin.com/4KSsgLfb

Класс сущности:

package org.tim.entities;

import lombok.AccessLevel;
import lombok.Data;
import lombok.NonNull;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;

@Entity
@Data
public class ExampleEntity {

@Id
@Setter(AccessLevel.NONE)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NotNull
@NonNull
private String name;

}

Класс хранилища:

package org.tim.repositories;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import org.tim.entities.ExampleEntity;

@Repository
public interface ExampleRepository extends JpaRepository<ExampleEntity, Long> {
}

Тестовый класс:

package org.tim;

import org.junit.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.tim.entities.ExampleEntity;
import org.tim.repositories.ExampleRepository;


@ExtendWith(SpringExtension.class)
@DataJpaTest
public class exampleTestClass {

@Autowired
private ExampleRepository exampleRepository;

@Test
public void exampleTest() {
    exampleRepository.save(new ExampleEntity("name"));
}
}

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Вы используете неправильную аннотацию @Test.

При использовании SpringExtension и JUnit Jupiter (JUnit 5) вы должны использовать import org.junit.jupiter.api.Test; вместо import org.junit.Test;.

0 голосов
/ 01 марта 2019

в документации написано:

Если вы используете JUnit 4, не забудьте также добавить @RunWith (SpringRunner.class) в ваш тест, иначе аннотации будут проигнорированы.Если вы используете JUnit 5, нет необходимости добавлять эквивалент @ExtendWith (SpringExtension) в качестве @SpringBootTest, а другие аннотации @… Test уже аннотированы с ним.

Testing Spring BootПриложения

Поэтому попробуйте удалить @extendWith из своего тестового класса

...