728x90

IntelliJ IDEA를 쓰고 있으며, 멀쩡히 잘 쓰다가 종종 잊을만하면 Cannot resolve symbol.. 에러가 날때가 있습니다.

 

예를 들면 아래와 같이 import가 제대로 안되어 있는 경우가 그런 경우입니다.

cannot resolve symbol import org.openjdk.jmh.runner.options.Options;

시도 방법 1

상단 메뉴바에서 Build > Clean Project 하고나서 Build > Rebuild Project를 해줍니다.

 

시도 방법 2

시도 방법 1로도 해결이 안되면 캐시를 비우고 재실행 해봅니다.

상단 메뉴바에서 File > Invalidate Caches / Restart…를 선택하고 IDE를 재실행합니다.

 

 

 

 
728x90

Spring boot 초기화 (command  line)

youtube-data-api 프로젝트를 생성하고 난 후에

IntelliJ IDEA 를 실행하여 해당 폴더를 지정하고 실행한다.

 

$ spring init -d=data-jpa,mysql,lombok -g=com.nuribot.youtube -a=youtube-data-api -n=youtube-data-api --package-name=com.nuribot.youtube --description="youtube api test & service" --build maven -j=1.8 -f --packaging=jar -v=1.0.0-SNAPSHOT youtube-data-api
$ cd youtube-data-api/

 

 

 

 

 

IntelliJ IDEA :  File > Project Structure.. 선택

 

IntelliJ IDEA :  File > Project Structure.. >

1. 왼쪽 탭 메뉴 Modules 선택

2. src > main > java 선택

3. 오른쪽 중단 탭 Sources 선택

 

IntelliJ IDEA :  File > Project Structure.. >

1. 왼쪽 탭 메뉴 Modules 선택

2. src > test > java 선택

3. 오른쪽 중단 탭 Tests 선택

 

@SpringBootTest

  • 실제 구동되는 어플리케이션과 똑같이 ApplicationContext를 로드하여 하고 싶은 테스트를 수행할 수 있습니다.
  • 단, 어플리케이션에 설정된 bean 을 모두 로드하기 때문에 규모가 클수록 느립니다. - 단위테스트가 무의미해질 수 있습니다.
  • 어플리케이션이 실행될 때의 설정을 임의로 바꾸어 테스트 진행 가능합니다.
  • 여러 단위 테스트를 하나의 통합된 테스트로 수행할 때 적합합니다.
  • 메인클래스와 함께 기본 제공됩니다.
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

	@Test
	public void contextLoads() {
	}

}

 

@RunWith

  • JUnit에 내장된 Runner를 사용하는 대신 어노테이션에 정의된 Runner 클래스 사용합니다.
  • @SpringBootTest 를 사용하려면 JUnit 실행에 필요한 SpringJUnit4ClassRunner 클래스를 상속받은 @RunWith(SpringRunner.class)를 붙여야 합니다.
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
public class ChannelsListTest {

}

 

@SpringBootTest 의 파라미터들

value : 테스트가 실행되기 전에 적용할 프로퍼티들을 주입할 수 있습니다. (기존의 프로퍼티 오버라이드)
properties : 테스트가 실행되기 전에 {key=value} 형식으로 프로퍼티 추가할 수 있습니다.
classes : ApplicationContext에 로드할 클래스 지정할 수 있습니다.

                 (지정하지 않으면 @SpringBootConfiguration을 찾아서 로드합니다.)
webEnvironment : 어플리케이션이 실행될 때의 웹 환경을 설정할 수 있습니다.

                (기본값은 Mock 서블릿을 로드하여 구동)

// value와 properties는 함께 사용할 수 없으므로 에러 발생
@RunWith(SpringRunner.class)
@SpringBootTest(value = "value=test"
        , properties = {"property.value=propertyTest"}
        , classes = {DemoApplicationTests.class}
        , webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class DemoApplicationTests {

    @Value("${value}")
    private String value;

    @Value("${property.value}")
    private String propertyValue;

    @Test
    public void contextLoads() {
        assertThat(value, is("test"));
        assertThat(propertyValue, is("propertyTest"));
    }
}

 

사용 팁

  • 프로파일(개발, QA, 운영) 마다 다른 DataSource를 갖는 경우, @ActiveProfiles("local") 을 사용할 수 있습니다.
  • @Transactional을 사용하면 테스트를 마치고 나서 수정된 데이터가 롤백됩니다.
  • @SpringBootTest는 기본적으로 @SpringBootApplication 이나 @SpringBootConfiguration 을 찾습니다. (둘 중 하나는 필수로 가지고 있어야 합니다.)

 

테스트 소스 작성

 

IntelliJ IDEA :  TEST 소스 실행 설정하기  > 1. Edit Configurations... 선택

1. +  키를 선택

2. Junit 을 선택

3. Name 입력

4. TEST 하고자 하는 TEST Class 선택

4. VM options : -client -ea -Xmx1024m 으로 수정

5. Apply 및 OK  버튼 클릭

 

IntelliJ IDEA :  TEST 소스 실행

 

 

+ Recent posts