Lauri
에 의해 작성된 답변을보고 Mockito mock of SecurityManager throwing an exception에 보안 관리자를 조롱하여 단위 테스트를 작성했습니다. 아래는 테스트 케이스powermokito를 사용하여 보안 관리자를 모방 할 수 없음
@RunWith(PowerMockRunner.class)
@PrepareForTest(System.class)
public class TestClass {
@Test
public void testcheckSecurity() {
//mocking the System class
PowerMockito.mockStatic(System.class);
SecurityManager secMan = PowerMockito.mock(SecurityManager.class);
PowerMockito.when(System.getSecurityManager()).thenReturn(secMan);
List<String> allowedClasses = Arrays.asList("ClassA", "ClassB", "ClassC", "ClassD");
BaseUtils.checkSecurity(allowedClasses);
}
}
이며,이
public class BaseUtils{
public static void checkSecurity(List<String> allowedClasses) {
SecurityManager secMan = System.getSecurityManager();
if (secMan != null) {
StackTraceElement[] trace = Thread.currentThread().getStackTrace();
String callingClass = trace[3].getClassName();
if (!allowedClasses.contains(callingClass)) {
secMan.checkPermission(new ManagementPermission("control"));
}
}
}
}
아래의 정적 방법을 테스트하지만 테스트 케이스를 디버깅 할 때, SecurityManager secMan
는 checkSecurity(List<String> allowedClasses)
방법 null입니다.
내가 뭘 잘못하고 있니? 이 문제를 해결하도록 도와주세요.
JUnit 4.12, PowerMock 1.7.0 및 Mockito 2.7.19 – glytching
과 함께 테스트에 통과했습니다. 시스템에 보안 관리자가있을 수 있습니다. 보안 관리자가 설정되지 않은 시스템에서이 작업을 실행합니다. –