2016-12-08 5 views
2

Я пытаюсь высмеять публичный класс, однако при этом Mockito выбрасывает исключение Mockito cannot mock this class.Mockito не может издеваться над этим классом

Класс Я хочу издеваться: https://github.com/scribejava/scribejava/blob/master/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java

код теста:

package xyz.jacobclark.adapter; 

import com.github.scribejava.apis.TwitterApi; 
import com.github.scribejava.core.builder.ServiceBuilder; 
import com.github.scribejava.core.model.OAuth1RequestToken; 
import com.github.scribejava.core.oauth.OAuth10aService; 
import org.junit.Assert; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.Mock; 
import org.mockito.junit.MockitoJUnitRunner; 

import java.io.IOException; 

import static org.hamcrest.Matchers.is; 
import static org.hamcrest.core.IsInstanceOf.any; 

@RunWith(MockitoJUnitRunner.class) 
public class TwitterOAuthAdapterTest { 
    @Mock 
    ServiceBuilder serviceBuilder; 

    @Test 
    public void getRequestTokenShouldReturnAValidRequestToken() throws IOException { 
     class TwitterOAuthAdapter { 
      private final OAuth10aService service; 

      public TwitterOAuthAdapter(ServiceBuilder serviceBuilder){ 
       this.service = serviceBuilder 
        .apiKey("") 
        .apiSecret("") 
        .build(TwitterApi.instance()); 
      } 

      public OAuth1RequestToken getRequestToken() throws IOException { 
       return this.service.getRequestToken(); 
      } 
     } 

     TwitterOAuthAdapter oAuthAdapter = new TwitterOAuthAdapter(serviceBuilder); 
     Assert.assertThat(oAuthAdapter.getRequestToken(), is(any(OAuth1RequestToken.class))); 
    } 
} 

Полный StackTrace:

xyz.jacobclark.adapter.TwitterOAuthAdapterTest 

org.mockito.exceptions.base.MockitoException: 
Mockito cannot mock this class: class com.github.scribejava.core.builder.ServiceBuilder. 

Mockito can only mock non-private & non-final classes. 
If you're not sure why you're getting this error, please report to the mailing list. 


Java    : 1.8 
JVM vendor name : Oracle Corporation 
JVM vendor version : 25.0-b70 
JVM name   : Java HotSpot(TM) 64-Bit Server VM 
JVM version  : 1.8.0-b132 
JVM info   : mixed mode 
OS name   : Mac OS X 
OS version   : 10.11.3 


Underlying exception : java.lang.IllegalArgumentException: object is not an instance of declaring class 

    at org.mockito.internal.runners.SilentJUnitRunner$1.withBefores(SilentJUnitRunner.java:29) 
    at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:276) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.mockito.internal.runners.SilentJUnitRunner.run(SilentJUnitRunner.java:39) 
    at org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:39) 
    at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:103) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$ForTypeArgument.resolve(TypeDescription.java:3843) 
    at net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$Chained.resolve(TypeDescription.java:3468) 
    at net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$ForTypeArgument.resolve(TypeDescription.java:3803) 
    at net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator.asList(TypeDescription.java:3439) 
    at net.bytebuddy.description.type.TypeDescription$Generic$OfWildcardType$ForLoadedType.getDeclaredAnnotations(TypeDescription.java:4748) 
    at net.bytebuddy.description.type.TypeDescription$Generic$Visitor$TypeVariableErasing.onWildcard(TypeDescription.java:680) 
    at net.bytebuddy.description.type.TypeDescription$Generic$Visitor$TypeVariableErasing.onWildcard(TypeDescription.java:663) 
    at net.bytebuddy.description.type.TypeDescription$Generic$OfWildcardType.accept(TypeDescription.java:4656) 
    at net.bytebuddy.description.type.TypeDescription$Generic$Visitor$TypeVariableErasing.onParameterizedType(TypeDescription.java:691) 
    at net.bytebuddy.description.type.TypeDescription$Generic$Visitor$TypeVariableErasing.onParameterizedType(TypeDescription.java:663) 
    at net.bytebuddy.description.type.TypeDescription$Generic$OfParameterizedType.accept(TypeDescription.java:4998) 
    at net.bytebuddy.description.type.TypeList$Generic$AbstractBase.accept(TypeList.java:249) 
    at net.bytebuddy.description.type.TypeDescription$Generic$Visitor$TypeVariableErasing$RetainedTypeVariable.getUpperBounds(TypeDescription.java:832) 
    at net.bytebuddy.description.type.TypeDescription$Generic$OfTypeVariable.asErasure(TypeDescription.java:5373) 
    at net.bytebuddy.description.method.MethodDescription$AbstractBase.asTypeToken(MethodDescription.java:701) 
    at net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Key$Harmonized.of(MethodGraph.java:881) 
    at net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default$Key$Store.registerTopLevel(MethodGraph.java:1074) 
    at net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default.doAnalyze(MethodGraph.java:588) 
    at net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default.analyze(MethodGraph.java:548) 
    at net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default.analyzeNullable(MethodGraph.java:567) 
    at net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default.doAnalyze(MethodGraph.java:581) 
    at net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$Default.compile(MethodGraph.java:521) 
    at net.bytebuddy.dynamic.scaffold.MethodGraph$Compiler$AbstractBase.compile(MethodGraph.java:442) 
    at net.bytebuddy.dynamic.scaffold.MethodRegistry$Default.prepare(MethodRegistry.java:480) 
    at net.bytebuddy.dynamic.scaffold.subclass.SubclassDynamicTypeBuilder.make(SubclassDynamicTypeBuilder.java:160) 
    at net.bytebuddy.dynamic.scaffold.subclass.SubclassDynamicTypeBuilder.make(SubclassDynamicTypeBuilder.java:153) 
    at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase.make(DynamicType.java:2568) 
    at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Delegator.make(DynamicType.java:2670) 
    at org.mockito.internal.creation.bytebuddy.SubclassBytecodeGenerator.mockClass(SubclassBytecodeGenerator.java:84) 
    at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator$CachedBytecodeGenerator.getOrGenerateMockClass(TypeCachingBytecodeGenerator.java:91) 
    at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator.mockClass(TypeCachingBytecodeGenerator.java:38) 
    at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMockType(SubclassByteBuddyMockMaker.java:67) 
    at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMock(SubclassByteBuddyMockMaker.java:38) 
    at org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker.createMock(ByteBuddyMockMaker.java:26) 
    at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:35) 
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:63) 
    at org.mockito.Mockito.mock(Mockito.java:1637) 
    at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:33) 
    at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:16) 
    at org.mockito.internal.configuration.DefaultAnnotationEngine.createMockFor(DefaultAnnotationEngine.java:39) 
    at org.mockito.internal.configuration.DefaultAnnotationEngine.process(DefaultAnnotationEngine.java:63) 
    at org.mockito.internal.configuration.InjectingAnnotationEngine.processIndependentAnnotations(InjectingAnnotationEngine.java:59) 
    at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:43) 
    at org.mockito.MockitoAnnotations.initMocks(MockitoAnnotations.java:67) 
    ... 23 more 


Test ignored. 
Process finished with exit code 255 
+2

Вы проверили http://stackoverflow.com/questions/37527038/mockito-object-is-not-an-instance-of-declaring-class? он говорит, что это может быть связано с вашей версией java vm – Reek

+0

Я обновил, но не повезло. –

+0

Это очень интересная проблема. Вы делаете что-нибудь интересное с вашими классами или испытаниями, например динамически загружаетесь из JAR? (Или любая другая причина, по которой у вас было бы два разных загрузчика классов, работающих в одном и том же тесте?) –

ответ

1

Если бы такой же вопрос. Когда я обновил версию Java JDK до версии 1.8.0_131, ошибка исчезла.

Смежные вопросы