问题标签 [mockito-kotlin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
104 浏览

kotlin - How can I throw an SQLServerException (or SQLException) with Mockito?

I am unable to create an instance of SQLServerException because the ctors are all internal. Getting below error when using SQLException

org.mockito.exceptions.base.MockitoException: Checked exception is invalid for this method!

Method signature (on SQLServerPreparedStatement): public boolean execute() throws SQLServerException, SQLTimeoutException

and... public final class SQLServerException extends SQLException

Mock:

What am I doing wrong? Shouldn't I be able to throw the base/super exception?

Re Suggested Question: The suggested question is very different from what I'm asking, the op in the other question is trying to throw SomeException which is not thrown by List.get nor in the inheritance tree

If you see "Method signature (on SQLServerPreparedStatement)" above, the method throws SQLServerException => public final class SQLServerException extends SQLException

But it doesn't like whenever(fakeCmd.execute()).thenThrow(SQLException())

Further, the accepted answer as pointed out is to throw RuntimeException because IndexOutOfBoundsException extends RuntimeException

In this case, so is SQLServerException extends SQLException

0 投票
0 回答
108 浏览

kotlin - 如何使用 mockito_kotlin 存根具有通用 KClass 参数的 Kotlin 方法?

在这个例子中,我找不到存根 barFunction 的方法。

Kotlin 编译器说:

我怎样才能找到一种以通用方式存根此方法的方法?

0 投票
0 回答
58 浏览

unit-testing - android,带有 kotlin 代码的库,在单元测试中使用什么:mockito-inline、mockito-kotlin、mock

拥有将从 java 代码转换为 kotlin 的 android 库项目。

它使用 mockito-all 和 powermock 进行了大量的单元测试和覆盖测试

现在想删除 powermock 并且似乎 mockito-inline 可以用于测试 kotlin 代码和静态成员,但是还有另一个 mockito-kotlin 和 mocki。

看到一些项目使用

kotlin 的推荐依赖项是什么,仅使用 mockito-inline 是否足够好,或者它也应该使用 mockito-kotlin?还是使用 mockito-inline 和 mockk?

0 投票
1 回答
1262 浏览

android - ViewModelTest 中的线程“main @coroutine#2”java.lang.NullPointerException 中的异常?

我已经在 ViewModel 中使用带有 mockito 的协程编写了单元测试。上课,但我得到以下异常

在我已实现视图模型逻辑的 ViewModel 类下方

低于存储库类

下面的接口类

接口 GiphyTaskApiService {

在我的 ViewModel 测试类下面

我试过的

1.[我尝试了以下链接][1]

  1. 我已经重写了 Viewmodel 逻辑,但是我在 com.example.giphyandroidapp.viewmodel.GiphyTaskViewModel$getGifsFromText$1.invokeSuspend(GiphyTaskViewModel.kt:26) 的 com.example.giphyandroidapp.viewmodel.GiphyTaskViewModel$getGifsFromText$1.invokeSuspend(GiphyTaskViewModel.kt:26) 的线程“main @coroutine#2”中得到了以下异常 xception .coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.test.TestCoroutineDispatcher.dispatch(TestCoroutineDispatcher.kt:50) at kotlinx.coroutines.test.internal.TestMainDispatcher.dispatch(MainTestDispatcher.kt:35) at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:305) at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt: 30) 在 kotlinx.coroutines.intrinsics.CancellableKt。startCoroutineCancellable$default(Cancellable.kt:27) at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:110) at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:158) at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders .common.kt:56) at kotlinx.coroutines.BuildersKt.launch(Unknown Source) at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:49) at kotlinx.coroutines.BuildersKt.launch$default(Unknown来源)在 com.example.giphyandroidapp.viewmodel.GiphyTaskViewModel.getGifsFromText(GiphyTaskViewModel.kt:24) 在 com.example.giphyandroidapp.viewmodel.GiphyTaskViewModelTest$onCreation_fetchUserApiCalled_dataSavedToLiveData$1.invokeSuspend(GiphyTaskViewModelTest.kt:82) 在 com.example.giphyandroidapp。视图模型。GiphyTaskViewModelTest$onCreation_fetchUserApiCalled_dataSavedToLiveData$1.invoke(GiphyTaskViewModelTest.kt) at com.example.giphyandroidapp.viewmodel.GiphyTaskViewModelTest$onCreation_fetchUserApiCalled_dataSavedToLiveData$1.invoke(GiphyTaskViewModelTest.kt) at kotlinx.coroutines.test.TestBuildersKt$runBlockingTest$deferred$1.in :50) 在 kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) 在 kotlinx.coroutines.test.TestCoroutineDispatcher.dispatch(TestCoroutineDispatcher. kt:50) 在 kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:305) 在 kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:30) 在 kotlinx.coroutines.intrinsics.CancellableKt。startCoroutineCancellable$default(Cancellable.kt:27) at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:110) at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:158) at kotlinx.coroutines.BuildersKt__Builders_commonKt.async(Builders .common.kt:91) at kotlinx.coroutines.BuildersKt.async(Unknown Source) at kotlinx.coroutines.BuildersKt__Builders_commonKt.async$default(Builders.common.kt:84) at kotlinx.coroutines.BuildersKt.async$default(Unknown来源)在 kotlinx.coroutines.test.TestBuildersKt.runBlockingTest(TestBuilders.kt:49) 在 kotlinx.coroutines.test.TestBuildersKt.runBlockingTest$default(TestBuilders.kt:45)​​ 在 com.example.giphyandroidapp.viewmodel.GiphyTaskViewModelTest.onCreation_fetchUserApiCalled_dataSavedToLiveData (GiphyTaskViewModelTest.kt:75) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl。在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 的 invoke0(Native Method)。 base/java.lang.reflect.Method.invoke(Method.java:566) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) at org.junit.internal.runners.model.ReflectiveCallable .run(ReflectiveCallable.java:12) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) 在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 在org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.mockito.internal.runners.DefaultInternalRunner$1$1.evaluate(DefaultInternalRunner.java:54) at com.example.giphyandroidapp.viewmodel。TestCoroutineRule$apply$1.evaluate(TaskCoroutineRule.kt:22) 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)在 org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) 在 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)在 org.junit.runners.ParentRunner.run(ParentRunner.java:413) 在 org.mockito.internal.runners.DefaultInternalRunner$1.run(DefaultInternalRunner.java:99) 在 org.mockito.internal.runners.DefaultInternalRunner。在 org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:163) 在 org.junit.runner 的 org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:40) 运行(DefaultInternalRunner.java:105) .JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220) 在 com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)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: 69)在 com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) 在 com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220) 在 com.intellij.rt.junit .JUnitStarter.main(JUnitStarter.java:53)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: 69)在 com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) 在 com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220) 在 com.intellij.rt.junit .JUnitStarter.main(JUnitStarter.java:53)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)在 com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) 在 com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) 在 com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart (JUnitStarter.java:220) 在 com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)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)在 com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) 在 com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) 在 com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart (JUnitStarter.java:220) 在 com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)startRunnerWithArgs(IdeaTestRunner.java:33) 在 com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220) 在 com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)startRunnerWithArgs(IdeaTestRunner.java:33) 在 com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220) 在 com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)

java.lang.NullPointerException 在 androidx.lifecycle.LiveData 的 androidx.arch.core.executor.DefaultTaskExecutor.isMainThread(DefaultTaskExecutor.java:77) 在 androidx.arch.core.executor.ArchTaskExecutor.isMainThread(ArchTaskExecutor.java:116)。在 com.example.giphyandroidapp.viewmodel.GiphyTaskViewModelTest$onCreation_fetchUserApiCalled_dataSavedToLiveData$1.invokeSuspend(GiphyTaskViewModelTest.kt:84) 在 com.example. 的 androidx.lifecycle.LiveData.observeForever(LiveData.java:224) 的 assertMainThread(LiveData.java:486)。 giphyandroidapp.viewmodel.GiphyTaskViewModelTest$onCreation_fetchUserApiCalled_dataSavedToLiveData$1.invoke(GiphyTaskViewModelTest.kt) at com.example.giphyandroidapp.viewmodel.GiphyTaskViewModelTest$onCreation_fetchUserApiCalled_dataSavedToLiveData$1.invoke(GiphyTaskViewModelTest.kt) at kotlinx.coroutines.test。TestBuildersKt$runBlockingTest$deferred$1.invokeSuspend(TestBuilders.kt:50) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.test.TestCoroutineDispatcher.dispatch(TestCoroutineDispatcher.kt:50) at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:305) at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:30)在 kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable$default(Cancellable.kt:27) 在 kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:110) 在 kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:158) 在kotlinx.coroutines.BuildersKt__Builders_commonKt.async(Builders.common.kt:91) 在 kotlinx。coroutines.BuildersKt.async(Unknown Source) at kotlinx.coroutines.BuildersKt__Builders_commonKt.async$default(Builders.common.kt:84) at kotlinx.coroutines.BuildersKt.async$default(Unknown Source) at kotlinx.coroutines.test.TestBuildersKt .runBlockingTest(TestBuilders.kt:49) at kotlinx.coroutines.test.TestBuildersKt.runBlockingTest$default(TestBuilders.kt:45)​​ at com.example.giphyandroidapp.viewmodel.GiphyTaskViewModelTest.onCreation_fetchUserApiCalled_dataSavedToLiveData(GiphyTaskViewModelTest.kt:75) at java。 base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:566) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.junit.runners 的 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)。 model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores. java:26) at org.mockito.internal.runners.DefaultInternalRunner$1$1.evaluate(DefaultInternalRunner.java:54) at com.example.giphyandroidapp.viewmodel.TestCoroutineRule$apply$1.evaluate(TaskCoroutineRule.kt:22) 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)在组织。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) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) 在 org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) 在 org.junit.runners.ParentRunner.run(ParentRunner .java:413) 在 org.mockito.internal.runners.DefaultInternalRunner$1.run(DefaultInternalRunner.java:99) 在 org.mockito.internal.runners.DefaultInternalRunner.run(DefaultInternalRunner.java:105) 在 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:69) 在 com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) 在 com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220) 在com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53) 上的 prepareStreamsAndStart(JUnitStarter.java:220)com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53) 上的 prepareStreamsAndStart(JUnitStarter.java:220)

我想知道我到底在哪里犯错了我必须做些什么才能成功通过测试

0 投票
1 回答
29 浏览

spring-boot - 未能将 Mockitos thenReturn 与谓词一起使用 - thenReturn 返回 404 而不是参数

我正在尝试使用 Mockito 在测试中返回一些默认值,但我得到了 404

我的测试:

这是我尝试模拟的界面上的方法:

这是模拟方法的用法,它不返回我告诉它的内容,但给了我 404:

从我的订阅商店调用它

0 投票
1 回答
208 浏览

kotlin - 如果没有类参数,Mockito-Kotlin 模拟函数如何工作?

Mockito 是一个模拟框架(味道很好)

mockito-kotlin 是一个小型库,它提供了在 Kotlin 中使用 Mockito 的辅助函数。

通常从 Kotlin 到 mockito 模拟接口我会写类似的东西

但是当使用 mockito-kotlin 我可以将其更改为

所以我的问题是,如果没有提供的类参数,模拟函数如何知道要模拟哪个接口?

0 投票
1 回答
471 浏览

android - 无法实例化名为“viewModel”的“class com.example.digiandroidapp.viewmodel.CarViewModel”类型的@InjectMocks 字段?

我正在开发 android 应用程序,我已经在 android 的 viewmodel 类中实现了 mockito,但是当我运行测试时,我得到了以下异常

在我的 CarViewModel.kt 下面

在 ViewModelTest 下面

  1. 使缓存重新启动无效 2.Followed 以下答案无法使用 java 类实例化名为异常的 @InjectMocks 字段

我想知道是什么导致了问题,为了避免异常我必须做些什么我遵循了很多stackoverflow帖子它没有解决我的问题

0 投票
0 回答
51 浏览

android - 如何存根 Spy Object 的挂起方法?

我得到了如何存根常规模拟对象的挂起函数以及如何存根间谍对象的常规方法的想法。

但是,我没有找到一种方法来存根间谍对象的挂起功能。

例如:

如果我确实whenever(method).thenReturn()给了我空异常,因为我将 any() 作为参数传递。我没有找到调用的方法

对于 spy 对象中的暂停方法。

任何帮助将不胜感激。谢谢。

0 投票
1 回答
347 浏览

kotlin - InjectMocks 不适用于具有默认值的 Kotlin 构造函数参数

编辑:我在这里用 mockito-kotlin 创建了一张票

我有一个这样定义的类:

看起来像这样定义的测试不起作用,因为没有注入模拟:

关于为什么的任何想法?

输出是:

我做了什么

需要但未调用:myDependency.doSomething(); -> 在 me.jpalacios.poc.MyDependency.doSomething(MyDependency.kt:6) 实际上,与此模拟的交互为零。

需要但未调用:myDependency.doSomething(); -> 在 me.jpalacios.poc.MyDependency.doSomething(MyDependency.kt:6) 实际上,与此模拟的交互为零。

在 me.jpalacios.poc.MyDependency.doSomething(MyDependency.kt:6) 在 me.jpalacios.poc.MyClassTest.Test InjectMocks(MyClassTest.kt:22) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0( Native Method) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ...

0 投票
2 回答
258 浏览

java - 如何对参数中的回调进行单元测试 - Kotlin

我有一个客户端类(在 Android 应用程序中用 Kotlin 编写),它实现了一个接口ReadyCallback(在应用程序的库中用 Java 编写,应用程序依赖于这个库)。在客户端中,我有一个createClient()方法将创建一个带有 ReadyCallback 参数的客户端。如果它准备好了,我将通过调用来执行其他任务classC.otherMethod(),如果没有准备好,我只是创建客户端而不做其他事情:

在图书馆:

在应用程序中:

在单元测试中,我想验证当我创建客户端并且它准备好时,classC 的 otherMethod() 将被调用。我尝试执行以下操作,但不正确:

错误信息显示:

我认为我得到这个错误的原因是,如果我不调用getReadyCallback(),这意味着我没有调用回调,所以没有调用 classC.otherMethod()。但除此之外,我真的坚持这一点,我不知道如何对我的期望行为进行单元测试(如果准备好,将调用 classC.otherMethod(),如果未准备好,则不会调用此方法)。

我知道我不能做下面这样的事情,因为 unitUnderTest 不是一个模拟对象:

谁能帮帮我?