Witam,
Chciałbym przetestować połączenie z bazą danych, jednak po odpaleniu testu dostaje błąd: IllegalState Failed to load ApplicationContext
. Dla testów utworzyłem application.properties
w src/test/resources o następującej zawartości:
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa
Mam interfejs rozszerzający Jparepository:
public interface BookRepository extends JpaRepository<Book, Long> {}
Klasę Book:
@Entity
@Table(name = "book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
private String description;
@Column(name = "release_date")
@Temporal(TemporalType.TIMESTAMP)
private Date releaseDate;
// konstruktory, gettery i settery
I chciałbym to przetestować w następujący sposób:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Main.class)
public class ToDelete {
@Autowired
private BookRepository bookRepository;
@Test
public void testingDatabase(){
Book book = bookRepository.save(new Book("Przemineło z wiatrem"));
Book foundBook = bookRepository.findById(book.getId()).orElse(new Book());
assertEquals(book.getId(), foundBook.getId());
}
}
Jednak dostaje ww. błąd i nie wiem, czy muszę umieszczać tą konfigurację, ponieważ w poradniku z którego się uczę nie ma nic na ten temat.
Spróbuj użyć @Resource zamiast @Autowired
@Black007: Zmiana na @Resource nic nie dała.
Dodaj do testu adnotację:
@SpringApplicationConfiguration(classes = Main.class)
i zobacz teraz
Nie wiem dlaczego, ale nie mogę dodać tej adnotacji. IntelliJ nie znajduje mi pasującej zależności. Tak nawiasem to mam dodane:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.194</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Dalej bez zmian.
Spróbuj appliaction.properties wrzucić do src/main/java, a nie w src/test/java.
Następnie użyj
@SpringApplicationConfiguration(classes = Main.class)
razem z tą dependency:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
*Main.class to twoja główna klasa aplikacji SpringBoot
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.