首页 > 解决方案 > IllegalStateException:无法初始化插件:接口 org.mockito.plugins.MockMaker

问题描述

我正在尝试编写单元测试。我正在使用 Kotlin DSL。但是,我收到此错误:

"C:\Program Files\Java\jdk1.8.0_271\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\Android\Android Studio\lib\idea_rt.jar=52357:C:\Program Files\Android\Android Studio\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Android\Android Studio\lib\idea_rt.jar" com.intellij.rt.execution.CommandLineWrapper C:\Users\Andris\AppData\Local\Temp\idea_classpath1129980195 com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.commonsense.mobile.SplashViewModelTest

java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)

    at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:84)
    at com.sun.proxy.$Proxy14.isTypeMockable(Unknown Source)
    at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:33)
    at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22)
    at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:250)
    at org.mockito.internal.creation.MockSettingsImpl.build(MockSettingsImpl.java:232)
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:60)
    at org.mockito.Mockito.mock(Mockito.java:1951)
    at org.mockito.internal.configuration.MockAnnotationProcessor.processAnnotationForMock(MockAnnotationProcessor.java:66)
    at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:27)
    at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:24)
    at org.mockito.internal.configuration.IndependentAnnotationEngine.createMockFor(IndependentAnnotationEngine.java:46)
    at org.mockito.internal.configuration.IndependentAnnotationEngine.process(IndependentAnnotationEngine.java:73)
    at org.mockito.internal.configuration.InjectingAnnotationEngine.processIndependentAnnotations(InjectingAnnotationEngine.java:73)
    at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:47)
    at org.mockito.MockitoAnnotations.openMocks(MockitoAnnotations.java:82)
    at org.mockito.internal.runners.DefaultInternalRunner$1$1.evaluate(DefaultInternalRunner.java:49)
    at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)
    at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at org.mockito.internal.runners.DefaultInternalRunner$1.run(DefaultInternalRunner.java:99)
    at org.mockito.internal.runners.DefaultInternalRunner.run(DefaultInternalRunner.java:105)
    at org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:40)
    at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:163)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
    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:498)
    at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:64)
Caused by: java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker implementation declared in sun.misc.CompoundEnumeration@2b98378d
    at org.mockito.internal.configuration.plugins.PluginInitializer.loadImpl(PluginInitializer.java:57)
    at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:65)
    at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:50)
    at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:19)
    at org.mockito.internal.configuration.plugins.Plugins.<clinit>(Plugins.java:16)
    at org.mockito.internal.runners.RunnerFactory$2.get(RunnerFactory.java:46)
    at org.mockito.internal.runners.RunnerFactory$2.get(RunnerFactory.java:44)
    at org.mockito.internal.runners.DefaultInternalRunner$1$1.evaluate(DefaultInternalRunner.java:46)
    ... 28 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.mockito.internal.configuration.plugins.PluginInitializer.loadImpl(PluginInitializer.java:52)
    ... 35 more
Caused by: java.lang.NullPointerException
    at org.mockito.internal.configuration.plugins.Plugins.getMockitoLogger(Plugins.java:73)
    at org.mockito.android.internal.creation.AndroidByteBuddyMockMaker.<init>(AndroidByteBuddyMockMaker.java:24)
    ... 40 more


Process finished with exit code -1

我目前的设置:

testImplementation(TestDependencies.JUnit.core)
    androidTestImplementation(TestDependencies.JUnit.ext)
    androidTestImplementation(TestDependencies.Espresso.core)

    testImplementation(TestDependencies.Mockito.core)
    testImplementation(TestDependencies.Mockito.android)
    androidTestImplementation(TestDependencies.Mockito.core)
    androidTestImplementation(TestDependencies.Mockito.android)

    testImplementation(TestDependencies.Coroutines.test)
    testImplementation(TestDependencies.AndroidX.testing)
    testImplementation("androidx.test:core:1.3.0")
@ExperimentalCoroutinesApi
@RunWith(MockitoJUnitRunner::class)
class SplashViewModelTest {
    // Subject under test
    private lateinit var viewModel: SplashScreenViewModel

    // Set the main coroutines dispatcher for unit testing.
    @ExperimentalCoroutinesApi
    @get:Rule
    var mainCoroutineRule = MainCoroutineRule()

    // Executes each task synchronously using Architecture Components.
    @get:Rule
    var instantExecutorRule = InstantTaskExecutorRule()

    @Mock
    private lateinit var getAssetsUseCase: GetAssetsUseCase

    @Mock
    private lateinit var getGlobalMenuUseCase: GetGlobalMenuUseCase

    @Mock
    private lateinit var mockObserver: Observer<Event<SplashScreenEvent>>

    @Captor
    private lateinit var argumentCaptor: ArgumentCaptor<Event<SplashScreenEvent>>

    @Before
    fun setupViewModel() {
        viewModel = SplashScreenViewModel(getAssetsUseCase, getGlobalMenuUseCase)
    }

    @Test
    fun test() = mainCoroutineRule.runBlockingTest {
        viewModel.screenEvent().observeForever(mockObserver)
        `when`(getAssetsUseCase.invoke()).thenReturn(Either.Right(Assets()))
        `when`(getGlobalMenuUseCase.invoke()).thenReturn(Either.Right(Entries()))
        verify(mockObserver, times(1)).onChanged(argumentCaptor.capture())
    }
}

版本:

// Testing
    const val jUnit = "4.13"
    const val extJUnit = "1.1.1"
    const val espresso = "3.2.0"
    const val mockito = "3.7.7"
    const val mockitoAndroid = "2.25.0"
    const val dexMaker = "2.12.1"

标签: javatestingmockito

解决方案


推荐阅读