static method에 대한 테스트 방법은 power mock을 사용하면 된다.
하지만 테스트를 진행하려 하니 power mock에서 exception을 발생시킨다.
1 2 3 4 5 6 7 |
java.lang.IllegalStateException: Failed to transform class with name com.naver.opensocial.business.ranking.RankingRepositoryTest. Reason: 3 at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:207) at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:145) at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:65) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) |
구글링으로 찾아봤더니 대략 이런 문서가 나온다. (참고)
요약하면,
javassist 라이브러리를 power mock에서 사용하게 되는데..
그 라이브러리에 버그가 있어서 3.6버전에서 문제가 있어서 3.12GA버전에서는 해결됐다.
실제로 찾아보니 javassist 라이브러리가 서로 다른 버전이 동시에 사용되고 있었다.
M2_REPO/jboss/javassist/3.7.ga/javassist-3.7.ga.jar – C:\Users\Administrator.m2\repository\jboss\javassist\3.7.ga\javassist-3.7.ga.jar
M2_REPO/org/javassist/javassist/3.14.0-GA/javassist-3.14.0-GA.jar – C:\Users\Administrator.m2\repository\org\javassist\javassist\3.14.0-GA\javassist-3.14.0-GA.jar
아마도 power mock에서는 재빠르게 최신 버전으로 라이브러리를 업데이트 한 것 같다.
정확한 버그 버전과 수정 버전은 모르겠지만, 대충 3.x버전대에서 있던 버그를 3.1x버전에서 수정한 것 같다.
1 2 3 4 5 6 7 8 9 10 11 |
<dependency> <groupId>opensymphony</groupId> <artifactId>xwork</artifactId> <version>1.2.4-SNAPSHOT-p3</version> <exclusions> <exclusion> <groupId>jboss</groupId> <artifactId>javassist</artifactId> </exclusion> </exclusions> </dependency> |
일단 수정됐는지 의존성 검사를 한 번 해보고…
mvn dependency:tree
opensymphony에서 OGNL 관련 부분이 쓰던 javassist가 사라졌다.
그리고 power mock은 정상 동작한다.