'2016/04'에 해당되는 글 2건

  1. 2016.04.08 Atom에서 Groovy 파일 테스트하기(JUnit)
  2. 2016.04.06 Atom에서 ScalaTest 사용하기
프로그래밍2016. 4. 8. 17:38

지난 글과 비슷한데, 이번에는 그루비(Groovy) 파일을 테스트하는 방법. 테스트는 JUnit을 이용하며, 그루비에는 이게 내장되어 있어 별도로 설치할 필요는 없다.


원리는 스칼라 때와 같다. groovy.bat를 호출하면 실행만 하고 끝나므로 테스트가 불가능하므로, 컴파일 먼저 하고 테스트를 하게 수정하는 거다. groovy.bat를 보면 .groovy 파일을 실행하는 부분은 다음과 같다.

"%DIRNAME%\startGroovy.bat" "%DIRNAME%" groovy.ui.GroovyMain %*

여기 위에 한 줄을 추가한다.


call "%DIRNAME%\startGroovy.bat" "%DIRNAME%" org.codehaus.groovy.tools.FileSystemCompiler %*

스칼라 때와 마찬가지로 groovyc.bat 파일에서 컴파일하는 부분을 가져온 거다. ScalaTest는 테스트 대상이 다른 클래스를 참조할 경우 .class 파일이 필요했는데 그루비는 그렇지는 않았다. 참조되는 클래스를 먼저 컴파일해야 테스트 파일도 실행된다. 단지 소스 파일과 다른 어딘가-_-에 생성되는 듯.


이제 아톰에서 자바를 실행하기만 하면 현재 작업하는 책에 나오는 4개 언어를 다 아톰만 가지고 쓸 수 있게 되는 셈인데... 유감스럽게도 자바는 워낙 프로젝트 기반이고 라이브러리가 많아 아톰에서 일일이 설정하는 게 더 불편할 듯싶어 포기.


자바와 스칼라는 이클립스(스칼라 IDE), 자바스크립트는 웹스톰, 나머지 언어는 아톰, 이 정도로 개발(!?) 환경을 정리할 수 있을 듯.



Posted by 필유
프로그래밍2016. 4. 6. 18:12

요즘 아톰(Atom) 에디터에 푹 빠져 모든 언어(및 마크다운, 아스키독 등 문서)를 이 에디터에서 돌려보고 있다. 자세한 건 나중에 다시 쓰고...


클로저 파일을 프로젝트 만들지 않고 파일 단위로 아톰에서 실행하기 위해 라이닝겐 배치 파일을 수정한 건 이미 깃허브에 올렸고, 오늘은 스칼라 파일이 여러 개 있을 때 실행하는 방법이다. 덧붙여 스칼라테스트(ScalaTest)도 지원하게 했다. 이건 딱히 깃허브에 올릴 수가 없어(전에 올린 것도 사실 PR 보내기도 좀 거시기한 수정이었다만) 일단 여기에 올린다.


수정 방법. scala.bat를 보면 .scala 파일을 실행하는 부분은 다음과 같다.


"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.MainGenericRunner  %*


여길 이렇게 고친다.


set _SCALA_FILE=%~n1

set _SCALA_FILE_PATH=%~dp1


"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.Main  %*

cd %_SCALA_FILE_PATH%

"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.MainGenericRunner  %_SCALA_FILE%

if %ERRORLEVEL%==0 goto end

"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" org.scalatest.run %~n1

goto end


설명-_-하자면... .scala 파일을 단순히 실행하는 게 아니라, .class 파일로 컴파일한 다음에 실행한다. 실행 결과 오류가 나지 않았다면 종료하고, 오류가 났다면 해당 클래스를 스칼라테스트로 다시 실행한다.


findstr /c:"import org.scalatest." "%1" > nul
if %ERRORLEVEL% == 0 goto RUN_TEST
"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.MainGenericRunner  %*
goto end

:RUN_TEST
"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" org.scalatest.run %~n1
goto end

테스트가 들어 있는 파일도 그냥 오류가 나지 않을 수 있어, 그냥 대상 파일 안에 org.scalatest를 임포트하는 텍스트가 있으면 테스트로, 아니면 그냥 실행하도록 바꿨다.


스칼라테스트(scalatest ... .jar) 파일은 스칼라의 라이브러리 폴더에 이미 있다고 가정하고 따로 클래스패스를 지정하지는 않았다.


그냥 무식한 방법. 컴파일 시 생성된 .class 파일은 지우지 않고 뒀다. 클로저와는 달리, 여러 파일 실행 시 클래스 파일이 있어야 한다.


물론 스칼라 IDE에서 스칼라테스트 플러그인을 받아서 함께 사용하는 게 더 깔끔하다. 근데 그러려면 프로젝트를 만들고 어쩌고 해야 하니까 그게 귀찮을 뿐.


Posted by 필유