传递给when()的参数不是模拟的!正确的存根示例:doThrow(new RuntimeException())。when(mock).someMethod();

问题描述 投票:-1回答:1

[在JUnit4中使用Mockito时,我在标题中遇到错误。

我的代码如下所示

package cn.patest.judgerAutoscalerKotlin

import org.junit.Test
import org.mockito.*

import java.lang.RuntimeException

class CalculateScaleToTest {
    @Mock
    private lateinit var test: cn.patest.judgerAutoscalerKotlin.Test

    private fun mockTest() {
        test = cn.patest.judgerAutoscalerKotlin.Test()
        Mockito.doAnswer { 1 }.`when`(test).test()
    }


    @Test
    fun z() {
        mockTest()
    }
}
package cn.patest.judgerAutoscalerKotlin

class Test() {
    fun test(): Int {
        return 1
    }
}

错误详细信息如下所示:

org.mockito.exceptions.misusing.NotAMockException: 传递给when()的参数不是模拟的! 正确存根的示例: doThrow(new RuntimeException())。when(mock).someMethod(); 在cn.patest.judgerAutoscalerKotlin.CalculateScaleToTest.mockTest(CalculateScaleToTest.kt:53) 在cn.patest.judgerAutoscalerKotlin.CalculateScaleToTest.z(CalculateScaleToTest.kt:61) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498) 在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:50) 在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 在org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 在org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:290) 在org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:71) 在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 在org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:58) 在org.junit.runners.ParentRunner上$ 2.evaluate(ParentRunner.java:268) 在org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在org.junit.runner.JUnitCore.run(JUnitCore.java:137)

我在Google上进行搜索,发现了一些类似的问题,但与我的情况不同。

kotlin junit mockito junit4
1个回答
0
投票

使用:

    test = cn.patest.judgerAutoscalerKotlin.Test()

您创建一个真实的对象,而不是一个模拟的对象。

删除上面的行并添加:

  @Before
  fun before() {

    MockitoAnnotations.initMocks( this )
  }

参考:

必须调用

MockitoAnnotations.initMocks(this)方法来初始化带注释的字段。

还请注意,在真实环境中模拟被测类没有任何意义(与此处的MCVE相反)。>>

© www.soinside.com 2019 - 2024. All rights reserved.