정적 최종 변수를 모의하고 JUnit, EasyMock 또는 PowerMock을 사용하여 i18n 클래스를 조롱하려고합니다. 어떻게해야합니까?JUnit, EasyMock 또는 PowerMock을 사용하여 정적 최종 변수 모의 방법
답변
과 같은 것이 있습니까? 변수가 있습니까? 내가 다시 부름을 부를 것이다. EasyMock 또는 PowerMock이 static final
필드를 다시 할당하는 쉬운 방법을 제공하지 않는다고 생각합니다. 이상한 유스 케이스처럼 들립니다.
디자인에 문제가있을 수 있습니다. 변수가 다른 값을 가질 수도 있고 심지어 테스트 목적 일지라도 static final
(또는보다 일반적으로 전역 상수)을 사용하지 마십시오. 다음과 같이
static void setFinalStatic(Field field, Object newValue) throws Exception {
field.setAccessible(true);
// remove final modifier from field
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
를 사용 :
어쨌든, 당신은 (: Using reflection to change static final File.separatorChar for unit testing?에서) 반사를 사용하는 것을 달성 할 수
setFinalStatic(MyClass.class.getField("myField"), "newValue"); // For a String
은 원래 값시에 필드를 다시 설정하는 것을 잊지 마세요 찢어지고.
이것을 사용하는 사람은 자바 컴파일러가 상수를 인라인 할 수 있으므로 코드가 실제로 다른 최종 필드에 액세스하지 않을 수 있음을 명심해야합니다 (인라인 할 때 상수가 쓸모 없으므로 File.separatorChar에서 작동해야 함). 이 [이 질문에 설명되어 있습니다 (http://stackoverflow.com/questions/5173372/java-static-final-values-replaced-in-code-when-compiling) –
변수를 다른 값을 경우에만 알고있는 동안 단위 테스트, 제안 된 접근 방식은 무엇입니까? – Sharif
PowerMock 기능의 조합을 사용하여 수행 할 수 있습니다. @PrepareForTest({...})
주석을 사용하여 정적 조롱을하고 필드를 조롱 한 다음 (Mockito.mock(...)
을 사용하지만 동등한 EasyMock 구조를 사용할 수 있음) WhiteBox.setInternalState(...)
메서드를 사용하여 값을 설정하십시오. 변수가 private
인 경우에도 작동합니다.
확장 예를 들어,이 링크를 참조하십시오 : http://codyaray.com/2012/05/mocking-static-java-util-logger-with-easymocks-powermock-extension
참고 - "확장 예제의 링크"는 질문에서 언급 한 ** 정적 ** 필드가 아닌 ** 정적 ** 필드를 조롱하는 것을 의미합니다. –
https://github.com/zhangyanwei/staticmock
- StaticMockito.enhanceClass ("xxx.Utility");
- StaticMockito.initMock (Utility.class);
- (Utility.toClientId (clientName)). thenReturn ("name"); verify (mocker (Utility.class)). toClientId (clientName);
- 1. PowerMock을 사용하여 여러 클래스의 정적 메서드 모의
- 2. PowerMock을 사용하여 정적 최종 메서드 조롱
- 3. Junit 모의 외부 정적 인터페이스
- 4. 정적 최종 변수 처리 방법
- 5. 정적 최종 변수
- 6. 정적 최종 변수 초기화
- 7. Powermock을 사용할 때 NoClassDefFoundError
- 8. 리플렉션을 사용하여 정적 최종 변수 액세스
- 9. 정적 메서드를 mockito로 모의 사용하는 방법?
- 10. Mockito/PowerMockito를 사용하여 모의 개인 최종 정적 객체
- 11. Android Junit 테스트 로컬 최종 변수
- 12. PowerMock을 사용하여 공용 메서드를 부분 모의 해킹하는 방법은 무엇입니까? 다음
- 13. 속성 또는 열거 형 또는 정적 최종
- 14. junit 모의 객체
- 15. phpunit을 모의 개체와 정적 방법
- 16. 정적 최종 변수 대신 특성 파일 사용
- 17. junit 및 easymock, 저장 중 예외
- 18. 정적 메소드 모의
- 19. 최종 변수 할당 : 선언 또는 생성자에서?
- 20. 열거 형 내에있는 개인 정적 최종 변수
- 21. EasyMock JUnit 테스트가 setter 메서드에서 오류를 throw합니다.
- 22. 비 최종 정적 문자열은 정적 최종 문자열보다 효율적입니까?
- 23. 지연 EasyMock 확인
- 24. 인스턴스 변수 또는 정적 변수?
- 25. Easymock 부분적 조롱 (EasyMock ClassExtension), 좋든 나쁘니?
- 26. 최종 변수 액세스 가능성
- 27. 문 전환 및 정적 블록의 최종 정적 변수 초기화
- 28. "정적 반사"는 Java에서 어떻게 작동합니까? (예 : mockito 또는 easymock)
- 29. 최종 변수
- 30. 정적 최종 변수에 값 할당
가능한 복제 [모의 개인 정적 최종 필드 또는 사용 mockito Jmockit (http://stackoverflow.com/questions/30703149/mock-private-static-final-field-using-mockito-or-jmockit) – kecso