Execution failed for task ':test'. > There were failing tests. 아.. 해결했다ㅠㅜ
아... 드디어 해결했다.
나는 빌드하는 과정에서 몇십번을 Execution failed for task ':test'. > There were failing tests. 와 같은 에러가 나서 DB에서 데이터를 가져오는데 어떠한 문제가 있다는 것으로 생각하였다. 동시에 테스트 케이스만 하면 잘 돌아가고 또 앱이 정상적으로 실행되고 그런와중에 모두를 빌드하면 또 안되니까 너무 햇갈렸다. 그 어디에서도 상위폴더의 이름이 한글로 되있다는것이 문제의 원인이라는 것은 알려주지 않았다. 또 그런 와중에 DB로 부터 가져오는 정보가 강의에서 보는 것과는 다르게 아래와 같이 이름정보는 가져오는데 PK정보는 가져오지 못해서뭔가 앱과 DB사이에 문제가 있는것이구나.. 라고 생각했었다. (아직까지왜DB에서 그렇게불안전한 정보를 가지고 오는것을 Hibernate가출력하는지 모르겠다. 이 문제를 해결하려고 build.gradle에 있는 H2 DB의 버전까지 질문게시판에서 하라는데로 일일히 맞추어 가며 시도했지만('com.h2database:h2:2.1.214') 해결이 되지 않았다.)
원인은 위에서 말한대로 빌드할때에는 상위폴더에 한글이 있으면 안된다는 것이다.
이 문제를 해결하는 과정에 배운것 중 하나가 나는 기존 h2디비를 가지고 있고 어떻게 같은 제품의 버전만 달리해서 사용할지 방법을 몰랐다. 그런데 그냥 build.gradle파일에 들어가
h2관련 dependency옆에 원하는 버전 숫자만 입력해 주고 코끼리 누르면 알아서 external Libraries에 있는 라이브러리가 실시간으로 수정되는 것이다. 참 신기했다. 이 정보를 찾은 곳이 이곳이고 출처: https://devlifetestcase.tistory.com/5
글을 보면 알겠지만 spring의 Guides라는 유용한 곳에서 정보를 얻고 있다. 글을 읽어 보았지만 정말 유용한 정보가 많은 곳이다. 내가 의문을 품고 있었던 것이 왜 Gradle 빌드 툴에서 Maven이 언급되는가 였는데
해당 글이 이 부분을 명확히 설명해 준다. https://spring.io/guides/gs/gradle/
이러한 유용한 정보를 많이 찾을수 있는 곳이 https://spring.io/guides/이다.
막간 공부거리.https://spring.io/guides/gs/gradle/
이래서 Gradle 빌드툴안에 maven이라는 단어가 들어간거다.
즉, dependencies안에 있는 라이브러리들은 컴파일시에도 필요하고 빌드시에도 필요한 dependencies인 것이다. 하지만 실질적으로 이 라이브러리가 사용되는 시점은 runtime혹은 test코드 실행시점이다.
Implementation이 붙으면 runtime때 실질적으로 사용되는 것이고 testImplementImplementation이 붙으면 test코드 실행시에 사용됨.
==>> 모두다 컴파일 언급되는 의존성이다. 하지만 실제 사용되는 것은 컴파일시점 혹은 런타임시점으로 구분된다. 예를들어 api는 컴파일, 런타임 모두에 사용되는 의존성이고 implementation은 실제로는 런타임시에 사용되는 의존성임. compileOnly는 컴파일시에만 runtimeOnly는 런타임시에만.