[SPRING] JpaTest를 수행 할 때 @SpringBootConfiguration을 찾을 수 없습니다.
SPRINGJpaTest를 수행 할 때 @SpringBootConfiguration을 찾을 수 없습니다.
나는 프레임 워크에 익숙하지 않다. (그냥 클래스를 통과했다.) springboot를 처음 사용했다.
CrudRepositories가 실제로 작동하는지 확인하기 위해 간단한 Junit 테스트를 실행하려고합니다.
계속 오류가 있습니다.
봄 부팅 자체를 구성하지 않습니다?
내 테스트 클래스
@RunWith(SpringRunner.class)
@DataJpaTest
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class JpaTest {
@Autowired
private AccountRepository repository;
@After
public void clearDb(){
repository.deleteAll();
}
@Test
public void createAccount(){
long id = 12;
Account u = new Account(id,"Tim Viz");
repository.save(u);
assertEquals(repository.findOne(id),u);
}
@Test
public void findAccountByUsername(){
long id = 12;
String username = "Tim Viz";
Account u = new Account(id,username);
repository.save(u);
assertEquals(repository.findByUsername(username),u);
}
내 스프링 부팅 응용 프로그램 시작 프로그램
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"domain.repositories"})
@ComponentScan(basePackages = {"controllers","domain"})
@EnableWebMvc
@PropertySources(value {@PropertySource("classpath:application.properties")})
@EntityScan(basePackages={"domain"})
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
}
내 저장소
public interface AccountRepository extends CrudRepository<Account,Long> {
public Account findByUsername(String username);
}
}
미리 감사드립니다.
해결법
-
==============================
1.사실, 스프링 부트는 대부분 자체적으로 설정됩니다. 아마도 이미 게시 한 많은 코드를 제거 할 수 있습니다. 특히 Application.
사실, 스프링 부트는 대부분 자체적으로 설정됩니다. 아마도 이미 게시 한 많은 코드를 제거 할 수 있습니다. 특히 Application.
모든 클래스의 패키지 이름을 포함 시키거나 최소한 Application 및 JpaTest의 패키지 이름을 포함했으면 좋겠습니다. @DataJpaTest와 몇 가지 다른 주석에 대한 사항은 현재 패키지에서 @SpringBootConfiguration 주석을 찾고, 찾을 수없는 경우 패키지 계층을 찾을 때까지 패키지 계층을 트래버스한다는 것입니다.
예를 들어 테스트 클래스의 정규화 된 이름이 com.example.test.JpaTest이고 응용 프로그램의 정규화 된 이름이 com.example.Application 인 경우 테스트 클래스는 @SpringBootApplication을 찾을 수 있습니다. @SpringBootConfiguration).
그러나 응용 프로그램이 com.example.application.Application과 같이 패키지 계층 구조의 다른 분기에 상주하면 찾을 수 없습니다.
다음 Maven 프로젝트를 고려하십시오.
my-test-project +--pom.xml +--src +--main +--com +--example +--Application.java +--test +--com +--example +--test +--JpaTest.java
Application.java에서 다음 내용을 살펴 보겠습니다.
package com.example; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
JpaTest.java의 내용이 뒤 따른다 :
package com.example.test; @RunWith(SpringRunner.class) @DataJpaTest public class JpaTest { @Test public void testDummy() { } }
모든 것이 효과가 있어야합니다. src / main / com / example 안에 app라는 새 폴더를 만든 다음 Application.java를 안에 넣고 (파일 내부의 패키지 선언을 업데이트하면) 테스트를 실행하면 다음과 같은 오류가 발생합니다.
-
==============================
2.구성은 응용 프로그램 클래스에 연결되므로 다음 사항을 모두 올바르게 설정합니다.
구성은 응용 프로그램 클래스에 연결되므로 다음 사항을 모두 올바르게 설정합니다.
@SpringBootTest(classes = Application.class)
여기 JHipster 프로젝트의 예.
-
==============================
3.@SpringBootApplication으로 주해 된 메인 클래스의 패키지 이름을 리팩터링했는지 확인하는 것이 가치가있다. 이 경우 테스트 케이스는 적절한 패키지에 있어야합니다. 그렇지 않으면 이전 패키지에서 테스트 케이스가 검색됩니다. 이것은 나를위한 경우였다.
@SpringBootApplication으로 주해 된 메인 클래스의 패키지 이름을 리팩터링했는지 확인하는 것이 가치가있다. 이 경우 테스트 케이스는 적절한 패키지에 있어야합니다. 그렇지 않으면 이전 패키지에서 테스트 케이스가 검색됩니다. 이것은 나를위한 경우였다.
-
==============================
4.Thomas Kåsene이 말한 것과 더불어,
Thomas Kåsene이 말한 것과 더불어,
@SpringBootTest(classes=com.package.path.class)
테스트 주석에 파일 계층 구조를 리팩토링하지 않으려는 경우 다른 클래스를 찾아야하는 위치를 지정합니다. 다음과 같이 오류 메시지가 암시하는 내용입니다.
-
==============================
5.Spring Boot 1.4에서 제공되는 테스트 슬라이스는 기능 지향 테스트 기능을 제공합니다.
Spring Boot 1.4에서 제공되는 테스트 슬라이스는 기능 지향 테스트 기능을 제공합니다.
예를 들어,
@JsonTest는 json 직렬화 및 비 직렬화를 테스트하는 간단한 Jackson 환경을 제공합니다.
@WebMvcTest는 모의 웹 환경을 제공하며 테스트 용 컨트롤러 클래스를 지정하고 테스트에 MockMvc를 삽입 할 수 있습니다.
@WebMvcTest(PostController.class) public class PostControllerMvcTest{ @Inject MockMvc mockMvc; }
@DataJpaTest는 내장 데이터베이스를 준비하고 테스트를위한 기본 JPA 환경을 제공합니다.
@RestClientTest는 테스트를위한 REST 클라이언트 환경을 제공하고, RestTemplateBuilder 등을 지원합니다.
이러한 주석은 SpringBootTest로 구성되지 않으며 일련의 AutoconfigureXXX 및 @TypeExcludesFilter 주석과 결합됩니다.
@DataJpaTest를 살펴보십시오.
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @BootstrapWith(SpringBootTestContextBootstrapper.class) @OverrideAutoConfiguration(enabled = false) @TypeExcludeFilters(DataJpaTypeExcludeFilter.class) @Transactional @AutoConfigureCache @AutoConfigureDataJpa @AutoConfigureTestDatabase @AutoConfigureTestEntityManager @ImportAutoConfiguration public @interface DataJpaTest {}
@AutoconfigureXXX 주석을 추가하여 기본 구성을 대체 할 수 있습니다.
@AutoConfigureTestDatabase(replace=NONE) @DataJpaTest public class TestClass{ }
당신의 문제를 살펴 보겠습니다.
-
==============================
6.이 문제를 해결하는 최선의 방법은 테스트 폴더 구조를 응용 프로그램 폴더 구조에 맞추는 것입니다.
이 문제를 해결하는 최선의 방법은 테스트 폴더 구조를 응용 프로그램 폴더 구조에 맞추는 것입니다.
내 프로젝트를 다른 폴더 구조 프로젝트에서 복제하여 발생하는 동일한 문제가 발생했습니다.
테스트 프로젝트와 애플리케이션 프로젝트가 동일한 구조를 가지면 테스트 클래스에 특별한 주석을 추가 할 필요가 없으며 모든 것이 그대로 작동합니다.
-
==============================
7.
import org.junit.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.web.servlet.AutoConfigureWebMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @DataJpaTest @SpringBootTest @AutoConfigureWebMvc public class RepoTest { @Autowired private ThingShiftDetailsRepository thingShiftDetailsRepo; @Test public void findThingShiftDetails() { ShiftDetails details = new ShiftDetails(); details.setThingId(1); thingShiftDetailsRepo.save(details); ShiftDetails dbDetails = thingShiftDetailsRepo.findByThingId(1); System.out.println(dbDetails); } }
위의 주석은 나를 위해 잘 작동했습니다. JPA에서 스프링 부트를 사용하고 있습니다.
from https://stackoverflow.com/questions/39084491/unable-to-find-a-springbootconfiguration-when-doing-a-jpatest by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] ProceedingJoinPoint에서 메소드의 주석 값을 얻는 방법? (0) | 2019.01.26 |
---|---|
[SPRING] @RestController 대 @RepositoryRestResource를 사용하는 경우 (0) | 2019.01.26 |
[SPRING] Spring에서 다중 ViewResolvers를 사용하는 방법? (0) | 2019.01.26 |
[SPRING] Spring MVC에서 컨트롤러의 라이프 사이클 (0) | 2019.01.26 |
[SPRING] Spring HATEOAS 임베디드 리소스 지원 (0) | 2019.01.26 |