2016-11-22 18 views
2

Java7으로 컴파일 된 코드로 정적 테스트를 조롱하는 데 문제가 있습니다. 내 테스트를 실행하고있는 경우,Java7 구문을 사용하여 정적 메서드를 조롱 할 때 PowerMock 문제가 발생했습니다.

java.lang.VerifyError: JVMVRFY012 stack shape inconsistent [...] 

을 반환

PowerMockito.mockStatic(StaticClassToMock.class); 

내 정적 클래스를 조롱 할 때

나는 주석

@RunWith(PowerMockRunner.class) 
@PrepareForTest(StaticClassToMock.class) 

내 JUnit 테스트를 주석하고 StaticClassToMock OR에서 catch 된 예외를 대체하고 t를 두어 Java7 구문을 제거합니다. 캐스케이드의 밑단은 잘 작동합니다.

Powemock (1.6.6)의 마지막 버전이 Java6으로 컴파일 된 것을 보았습니다. PowerMock가 Java6로 컴파일 할 때

Java7 구조에 관한 내 문제인가?

감사합니다.

답변

1

그것은 이상한 오류에 오신 것을 환영합니다.

첫 번째 질문은 - IBM JDK를 사용하고 있습니까? IBM JDK 및 PowerMock은 Oracle/OpenJDK 및 PowerMock보다 훨씬 "기이하다". 당신은 몇 가지 검색을 수행 할 경우

, 잠재적 인 힌트 많이 주위있다 :

  1. VerifyError on WAS
  2. Code not working with Java7

어쨌든, 첫 번째 대답은 다음과 같습니다 사용하여 JVM을 실행하면 간단하게 시도 -noverify은 어떤 차이가 있습니다.

더 긴 대답 : 변경할 수없는 타사 코드를 테스트하지 않는 한; 고려하십시오 ... 정적 코드를 사용하면 PowerMock으로 전환 할 수 있습니다.

당신이 볼 때, 정적이 먼저 이상 좋은 OO 디자인입니다. 그것은 조심스럽게 사용해야합니다. 그것은 당신의 코드에 직접적인 결합을 많이합니다. 그리고 간단히 말해서 : 정적 인을 사용하면 테스트하기가 어렵거나 불가능한 코드를 만드는 간단한 방법 중 하나입니다! 따라서 코드를 변경하는 옵션이 있다면 videos을보고 테스트 가능 코드 코드를 만드는 방법을 알아볼 수 있습니다. 그러면 PowerMock으로 전환 할 필요가 없어집니다.

내 개인적인 두 센트 : 나는 많은 시간을 들여 이러한 PowerMock 문제를 찾아 냈습니다. 그런 다음 우리는 보통 단위 테스트를 중단하지 않는 정적 콘텐츠 만 허용하는 다른 디자인을하기로 결정했습니다. 그 이후 우리는 EasyMock과 Mockito와 함께 살고 있습니다.PowerMock이 더 이상 필요하지 않습니다. 더 이상 아무 것도 없었던 문제를 디버깅하는 데 시간을 낭비 할 필요가 없습니다. 생산 코드와 관련이 있습니다. 그러나 조롱하는 프레임 워크 만.

+0

설명 주셔서 감사합니다 GhostCat, 나는 정적 코드와 IBM JDK에 대한 귀하의 의견에 완전히 동의합니다. 불행히도 IBM 코드를 확장하고 있으며 기존 코드를 수정할 방법이 없습니다. 어쨌든 나는이 자료를 해결할 수있었습니다 : oldjavassist 라이브러리 때문이었습니다. 새로운 버전으로 업그레이드하면 문제가 해결됩니다. 고마워요! – flavio

+1

당신은 매우 환영합니다; 업데이트 해 주셔서 감사합니다. – GhostCat