Моя цель - использовать базу данных в памяти для этих модульных тестов, и эти зависимости перечислены как:
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
runtimeOnly("com.h2database:h2")
Так, чтобы экземпляр репозитория действительно взаимодействовал с БД, а я не просто имитирую возвращаемые значения.
Проблема в том, что когда я запускаю свой модульный тест, экземпляр репозитория внутри экземпляра службы имеет вид null
.
Почему это так? Мне не хватает какой-то аннотации в классе модульного теста для инициализации экземпляра репозитория?
Это вывод консоли при запуске моего модульного теста:
null
java.lang.NullPointerException
at com.my.MyService.findAll(MyService.java:20)
at com.my.MyTest.testMy(MyTest.java:23)
Мой класс модульного теста:
public class MyTest {
@MockBean
MyRepository myRepository;
@Test
void testMy() {
MyService myService = new MyService();
int size = myService.findAll().size();
Assertions.assertEquals(0, size);
}
}
Мой класс обслуживания:
@Service
public class MyService {
@Autowired
MyRepository myRepository;
public List<MyEntity> findAll() {
System.out.println(myRepository); // null
return (List<MyEntity>) myRepository.findAll(); // throws NullPointerException
}
@Transactional
public MyEntity create(MyEntity myEntity) {
myRepository.save(myEntity);
return myEntity;
}
}
Мой класс репозитория:
@Repository
public interface MyRepository extends CrudRepository<MyEntity, Long> {
}
Мой класс сущности:
@Entity
public class MyEntity {
@Id
@GeneratedValue
public Long id;
}