【发布时间】:2019-11-28 01:33:00
【问题描述】:
我有一个以
身份运行的测试@RunWith(MockitoJUnitRunner.StrictStubs::class)
class MyAdapterTest {
@Mock
private lateinit var clickListener: MyAdapter.Listener
private val options: MutableList<Option> = mutableListOf()
private lateinit var myAdapter: MyAdapter
private val mockModels = MockModels()
@Before
fun init() {
MockitoAnnotations.initMocks(this);
options.add(mockModels.getOption())
myAdapter = MyAdapter(options, clickListener) // <-- This line fails
}
@Test
fun `Get item count`() {
Assert.assertEquals(myAdapter.itemCount, options.size)
}
}
在哪里
class MyAdapter(val options: MutableList<Option>,
val clickListener: Listener) :
RecyclerView.Adapter<MyAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int)
= ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_option, parent, false))
override fun getItemCount() = options.size
...
}
当这是运行时,我得到一个异常:
java.lang.RuntimeException: 存根!
观察堆栈跟踪可能是因为Observable 没有实现,因为它是来自 Android 库的存根。
at android.database.Observable.<init>(Observable.java:34)
at android.support.v7.widget.RecyclerView$AdapterDataObservable.<init>(RecyclerView.java:11774)
at android.support.v7.widget.RecyclerView$Adapter.<init>(RecyclerView.java:6593)
at com.my.project.adapters.MyAdapter.<init>(MyAdapter.kt:23) <<<- Super Constructor
at com.my.project.adapters.MyAdapterTest.init(MyAdapterTest.kt:41) << @Before
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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
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.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
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.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitForkedStarter.main(JUnitForkedStarter.java:41)
【问题讨论】:
标签: android junit android-recyclerview mocking mockito