【发布时间】:2021-07-22 16:14:05
【问题描述】:
所以我有课
class Test<T : SomeListener> @Inject constructor(
private val dependency1: Dependency1,
private val listener: T
)
我正在尝试使用 mockk 为其编写单元测试,并在尝试使用泛型类型对其进行模拟和初始化时遇到错误。
class TestTest {
@MockK
lateinit var dependency1: Dependency1
@MockK
lateinit var listener: ListenerImpl
@InjectMockKs(overrideValues = true)
lateinit var testObject: Test<ListenerImpl>
}
我不断收到错误“io.mockk.MockKException: No matching constructors found: ... listener : T =
使用这个通用参数值正确模拟构造函数的正确方法是什么?
【问题讨论】:
-
我猜是因为类型擦除,在字节码构造函数中会有签名
<init>(Dependency1, SomeListener)。而 mockk 试图找到<init>(Dependency1, ListenerImpl)并失败了。你应该使用lateinit var testObject: Test< SomeListener>。 -
感谢您的评论。不幸的是同样的错误。它似乎并不关心在模拟中分配的泛型。它总是只引用'listener T'
标签: android android-testing mockk