3

I want to mock GSSManager for unit testing using Powermock. It failed when I did mockStatic(GSSManager.class) because of this error:

java.lang.VerifyError: Bad return type
Exception Details:
  Location:
    org/ietf/jgss/GSSManager.getInstance()Lorg/ietf/jgss/GSSManager; @157: areturn
  Reason:
    Type 'sun/security/jgss/GSSManagerImpl' (current frame, stack[0]) is not assignable to 'org/ietf/jgss/GSSManager' (from method signature)
  Current Frame:
    bci: @157
    flags: { }
    locals: { 'java/lang/Object', null, 'sun/security/jgss/GSSManagerImpl', 'java/lang/Object' }
    stack: { 'sun/security/jgss/GSSManagerImpl' }

I cant understand why. The getInstance in GSSManager return new GSSManagerImpl

I think it might be linkage error:

java.lang.LinkageError: loader constraint violation: when resolving overridden method "sun.security.jgss.GSSManagerImpl$$EnhancerByCGLIB$$3bcb7afc.getMechs()[Lorg/ietf/jgss/Oid;" the class loader (instance of org/powermock/core/classloader/MockClassLoader) of the current class, sun/security/jgss/GSSManagerImpl$$EnhancerByCGLIB$$3bcb7afc, and its superclass loader (instance of <bootloader>), have different Class objects for the type [Lorg/ietf/jgss/Oid; used in the signature

0 Answers0