2017-12-01 3 views
0

코드베이스에서 널리 사용되는 기본 클래스를 변경하여 정적 초기화 블록을 추가했습니다. 지금이 어떤 경우에 작동하고PowerMock @SuppressStaticInitializationFor가 테스트 클래스 내의 중첩 클래스에 대해 작동하지 않습니다.

@SuppressStaticInitializationFor("com.mycompany.WidelyUsedBaseClass") 

을 추가하여 작동하도록 노력하고, 우리의 단위 테스트의 모든 통해 갈거야,하지만 난 그것을 내부 클래스가 테스트 클래스와 함께 동작하지 않습니다 WidelyUsedBaseClass을 확장합니다. (왜 이러한 중첩 클래스가 존재하는지 묻지 말고 표준 모의 테스트가 충분하지 않은 이유는 모르겠다. 어쨌든 테스트 로직을 이해하고 있다고 확신하지 못하기 때문에 이것을 리 팩터로 사용하려고하지 않는다. 이러한 내부 클래스를 사용하여)

여기 무슨 뜻인지의 예 :.

@RunWith(PowerMockRunner.class) 
@SuppressStaticInitializationFor("com.mycompany.WidelyUsedBaseClass") // <-- This isn't working! I can still see <clinit> in the exception when the test fails... 
public class SomeTestsFromAnotherTeam 
{ 
    // test logic... 
    // more test logic... 
    Stub myStub = new Stub(); 
    // more test logic... 

    private class Stub extends WidelyUsedBaseClass 
    { 
     // some other logic... 
    } 
} 

나는 문제가 new Stub() 전화에서 발생 생각합니다.

답변

0

글쎄, 정확히 무슨 일이 일어나는지 알 수는 없지만 문제를 해결할 방법을 찾았습니다.

내부 클래스를 둘러싼 클래스 외부로 이동 한 후 테스트가 완료됩니다. 나는 단지 동일한 파일에 SomeTestsFromAnotherTeam 클래스 뒤에 넣고 패키지를 private로 만들었습니다 :

public class SomeTestsFromAnotherTeam 
{ 
    // ... 
} 

class Stub extends WidelyUsedBaseClass 
{ 
    // ... 
} 
관련 문제