Whiteship's Note


[AspectJ] LTW시 메이븐에 VM 옵션주기

AOP : 2009.06.12 19:59


스프링 @Configurable을 이용하려면 정적인 컴파일 시점 위빙으로는 안 됩니다. 객체가 필요해서 해당 클래스를 처음 클래스로더가 읽어갈 때.. 그 때 aop.xml 정보를 참조해서 위빙을 해야 합니다. 그게 바로 LTW죠.

-javaagent:/path/to/spring-agent.jar

그러려면 이런 옵션을 VM 인자로 넘겨줘야 합니다. 이클립스에서 JUnit 테스트를 실행할 때도 예외는 아닙니다.


이런식으로 모든 테스트에 인자를 줘야 하는데.. 여간 귀찮은 작업이 아닙니다. 프로젝트 별로 VM 인자를 설정하는 방법이 없나. 모르겠습니다.

메이븐으로 빌드를 하면 당연히 실패하겠죠. 그래서 메이븐에도 설정해줘야합니다. test 할 때 위빙 옵션을 다음과 같이 줄 수 있습니다.

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.4.2</version>
                <configuration>
                    <argLine>-javaagent:weaving/spring-agent.jar</argLine>
                </configuration>
            </plugin>

이클립스 + 콘솔창 한개는 기본으로 들고 개발을 해야겠습니다. 안그래도 git와 mvn war:inplace 때문에 거의 항상 콘솔창 하나를 띄워서 같이 작업하는데, mvn clean test도 애용하게 생겼네요.
top


메이븐 프로젝트에서 단위/통합 테스트 어설프게 구분하기

Good Tools : 2009.05.13 17:58


참조: http://wiki.rodcoffin.com/index.php?title=Maven_Integration_Testing

안타깝게도 maven-surefire-plugin에는 아직 이 둘을 구분지을 만한 기능이 없습니다. 그럼에도 불구하고 기존에 제공하는 기능들을 잘~ 조합하여 원한 것과 비슷한 결과를 도출해 냅니다. 결코 원하던 결과는 아니지만, 뭐 그나마 그래도 다행인 결과이기는 합니다.

결론부터 보자면

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>**/*WebTest.java</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <id>integration-test</id>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <phase>integration-test</phase>
                        <configuration>
                            <excludes>
                                <exclude>none</exclude>
                            </excludes>
                            <includes>
                                <include>**/*WebTest.java</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

이런 식으로 설정해야
<단위 테스트>
mvn test를 실행 할 때 WebTest로 끝나는 자바 파일은 테스트 대상에서 제외하고,
<통합 테스트>
mvn integration-test를 실행 할 때는 모든 WebTest로 끝나는 자바 파일을 포함하여 모든 것들을 다 테스트 합니다.

그나마 다행이라고 한 이유는 통합 테스트를 할 때 단위 테스트를 실행하는 건 시간 상 메모리 상 분명히 오버헤드에 해당하지만, 통합 테스트 자체가 이미 상당량의 시간과 메모리를 잡아 먹을 것이기 때문에, 마치 큰 산에다가 흙 한 줌 더한 꼴로 볼 수 있기 때문이죠. 또 하나 테스트 실패/성공 측면에서 보더라도 이미 단위 테스트 단계를 통과하고 온 것들이라면 이 단계에서 실패할 가능성은 거의 없다고 봐도 무관하겠죠.

그래도 좀.. 잘 나눌 수 있게 sufire:integration-test 같은 골을 추가해주거나, 설정을 좀 더 잘할 수 있게 기능을 추가해줬으면 좋겠습니다.

ps: mutual exclusive 설정 같은걸 추가해주면 안 되남..
top