본문 바로가기
자바

개인적인 기능이나 필드 또는 내부 클래스가있는 개인 기능이나 클래스를 어떻게 테스트합니까?

by º기록 2021. 4. 13.
반응형


테스트를 실행할 수있는 메소드 또는 함수에 대한 액세스 수정자를 변경하는 것이 나쁘다.

 

해결 방법

 

업데이트 :


@Jailbreak Foo foo = new Foo();
// Direct, *type-safe* access to *all* foo's members
foo.privateMethod(x, y, z);
foo.privateField = value;

이렇게하면 코드가 유형 안전하고 읽을 수 있습니다.디자인이 손상되지 않고 테스트를 위해 과다 노출 방법과 필드가 없습니다.


내부적으로 우리는 헬퍼를 사용하여 <코드> 개인 및 private static 변수를 가져오고 private private static private static 변수를 사용하고 있습니다.> 방법.다음 패턴을 사용하면 개인 메소드 및 필드와 관련된 모든 것을 할 수 있습니다.물론 반사를 통해 private static final 변수를 변경할 수 없습니다.

Method method = TargetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);

필드의 경우 :

Field field = TargetClass.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(object, value);

노트 :
1. TargetClass.getDeclaredMethod(methodName, argClasses) lets you look into private methods. The same thing applies for getDeclaredField.
2. setaCcessible (true) 는 개인과 함께 주위를 재생해야합니다.

 

참조 페이지 https://stackoverflow.com/questions/34571

 

 

반응형

댓글