Есть класс
package dev5.lavishek.trains.dao;
import dev5.lavishek.trains.entity.Ticket;
import java.time.LocalDate;
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface TicketRepository extends CrudRepository<Ticket, Integer> {
@Query(value = "SELECT ticket "
+ "FROM Ticket ticket "
+ "WHERE ((ticket.train.id =:idTrain) AND (ticket.dateDeparture=:departure))")
List<Ticket> getTicketsByTrainAndDate(@Param("idTrain") Integer idTrain,
@Param("departure") LocalDate dateDeparture);
}
Пишу для него тест
package dev5.lavishek.trains.dao;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@DataJpaTest
class TicketRepositoryTest {
@Autowired
private TestEntityManager entityManager;
@Autowired
private TicketRepository repository;
@BeforeEach
void setUp() {
repository.findAll();
}
@AfterEach
void tearDown() {
}
@Test
void getTicketsByTrainAndDate() {
}
}
Структура проекта
application.properties
spring.datasource.url=jdbc:h2:file:C:\\Users\\Alexander\\YandexDisk\\NetCracker\\TrainsProject\\database\\database
spring.datasource.username=admin
spring.datasource.password=1234
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
В классе с тестами @Autowired поле = null ; Вылетает NPE
Также есть вопрос как для тестов сделать отдельный application.properties , чтоб для тестов использовать например базу данных в памяти , а не менять основную.
Вы можете использовать аннотацию @TestPropertySource, чтобы указать на файл с настройками. Можете создать тестовые настройки.
из javadoc:
test property sources can be used to selectively override properties defined in system and application property sources
test property sources может использоваться для выборочного переопределения свойств системы и приложения
Например:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ExampleApplication.class)
@TestPropertySource(locations="classpath:test.properties")
public class ExampleApplicationTests {
}
У тебя там мульти-модульный проект. Сам контекст поднимается в одном модуле (console), а тесты находятся в другом. Чтобы они заработали им нужен какой-то стартовый конфигурационный класс, который поднимет контекст (как-то так...).
Поэтому делаем класс TestConfig
:
@Configuration
@EnableJpaRepositories
@EnableAutoConfiguration
@EntityScan("dev5.lavishek.trains.entity")
public class TestConfig {
}
И рядом делаем тестовый класс:
@ActiveProfiles("h2")
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestConfig.class)
public class TicketRepositoryTest {
@Autowired private TicketRepository repo;
@Before
public void setUp() throws Exception {
repo.save(asList(
new Ticket(LocalDate.now(), 1, null, null, null, null, null),
new Ticket(LocalDate.now(), 2, null, null, null, null, null))
);
}
@Test
public void findAllTest() throws Exception {
assertThat(repo).isNotNull();
assertThat(repo.findAll()).hasSize(2);
}
}
@SpringBootTest(classes = TestConfig.class)
- эта аннотация говорит какой класс использовать для конфигурации контекста.
Далее, переименовываем твой application.properties
в application-nc.properties
(чтобы он не мешал) и создаем пустой файл application-h2.properties
- это нужно, во-первых, чтобы сказать тесту, что мы хотим использовать профиль "h2" (см. подробнее здесь), а во-вторых, Спринг сам поднимает базу H2 в памяти, если она есть в зависимостях (поэтому файл пустой). (Можешь пропустить этот шаг, если у тебя все заработает без него.)
Чтобы все заработало, в pom.xml
модуля service
нужно удалить зависимость org.springframework:spring-context
- она мешает подняться контексту.
Это что, тестовое от NC?..
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Кто-нибудь может объяснить как скачать текстовый файл из Dropbox API v2В интернете в основном на устаревшую версию Dropbox API v1
Добрый день, сразу к делу, у меня в приложении куча сцен и каждая сцена - это свой объект, там иерархия своя естественно создано и тд
При запуске меню "Debug Main" в Android Studio 30 выдаёт эту ошибку:
В качестве компаратора используйте лямбда-функцию, задающую реализацию методу compare() из интерфейса javautil