簡體   English   中英

PowerMockito whenNew返回null

[英]PowerMockito whenNew returns null

在我無法重構的源類中(因此我不能在這里使用建議),其中有= new XXX的對象創建。 而且我必須模擬他們的函數調用X()。call()。

為此,我正在使用powermock的whenNew()函數。 但是在這種情況下,我正在測試的類LoginInuccessHandler中具有null。 這是我的LoginSuccessHandlerTest類:

@RunWith(PowerMockRunner.class)
public class LoginSuccessHandlerTest {

    @InjectMocks private LoginSuccessHandler loginSuccessHandler;
    @Mock private GuiSessionDAO guiSessionDAO;
    @Mock private UserAuthorityDAO userAuthorityDAO;
    @Mock private OrcaAuthorizationServiceBean orcaAuthorizationServiceBean;
    @Mock private OrcaAuthorizationServiceBeanService orcaAuthorizationServiceBeanService;
    @Mock private GetUserRolesReturnModel userRolesReturnModel;

    private Authentication authentication;
    private MockHttpServletRequest request;
    private MockHttpServletResponse response;

    @Before
    public void setUp() {
        request = new MockHttpServletRequest();
        response = new MockHttpServletResponse();
        authentication = new TestingAuthenticationToken("foo", "foo", "foo");
    }

    @PrepareForTest({LoginSuccessHandler.class})
    @Test
    public void onAuthenticationSuccess() throws Exception {



        whenNew(OrcaAuthorizationServiceBeanService.class).withArguments(URL.class).thenReturn(orcaAuthorizationServiceBeanService);

        p("Mocking Orca WS calls");
        when(orcaAuthorizationServiceBeanService.getOrcaAuthorizationServiceBeanPort()).thenReturn(orcaAuthorizationServiceBean);
        when(orcaAuthorizationServiceBean.getUserRoles(any(Header.class), anyString())).thenReturn(userRolesReturnModel);
        when(userRolesReturnModel.getUserRoles()).thenReturn(Collections.singletonList("ADMIN"));

        p("Starting mock log in");
        loginSuccessHandler.onAuthenticationSuccess(request, response, authentication);

        assertEquals(MockHttpServletResponse.SC_OK, response.getStatus());
    }

    private void p(String s) {
        System.out.println(s);
    }

在這里我得到空

OrcaAuthorizationServiceBeanService service = new OrcaAuthorizationServiceBeanService(new URL(url));

當我調試時,我可以確認powermockito正在運行以模擬此對象的創建,並且此方法被調用:

public static synchronized NewInvocationControl<?> putNewInstanceControl(Class<?> type, NewInvocationControl<?> control) {
        return newSubstitutions.put(type, control);
    }

這些是參數:

type = {Class@1755} "class com.ttech.timsgui.ldap.OrcaAuthorizationServiceBeanService"
 cachedConstructor = null
 newInstanceCallerCache = null
 name = "com.ttech.timsgui.ldap.OrcaAuthorizationServiceBeanService"
 classLoader = {MockClassLoader@2118} 
 reflectionData = {SoftReference@2119} 
 classRedefinedCount = 0
 genericInfo = null
 enumConstants = null
 enumConstantDirectory = null
 annotationData = null
 annotationType = null
 classValueMap = null
control = {MockitoNewInvocationControl@2093} 
 substitute = {InvocationSubstitute$$EnhancerByMockitoWithCGLIB$$4d9f6379@2109} "invocationSubstitute"
  CGLIB$BOUND = true
  CGLIB$CALLBACK_0 = {PowerMockMethodInterceptorFilter@2115} 
  CGLIB$CALLBACK_1 = {SerializableNoOp@2116} 

這是碰到吸氣劑的結果:

public static synchronized NewInvocationControl<?> getNewInstanceControl(Class<?> type) {
    return newSubstitutions.get(type);
}

type = {Class@277} "class java.net.URL"
newSubstitutions = {HashMap@1823}  size = 1
 0 = {HashMap$Node@2195} "class com.ttech.timsgui.ldap.OrcaAuthorizationServiceBeanService" -> 
  key = {Class@1755} "class com.ttech.timsgui.ldap.OrcaAuthorizationServiceBeanService"
  value = {MockitoNewInvocationControl@2137} 

這將返回null,對象創建也將返回null。 是什么導致此問題?

嘗試,

whenNew(OrcaAuthorizationServiceBeanService.class).withAnyArguments().thenReturn(orcaAuthorizationServiceBeanService);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM