我的所有服务都扩展了一个抽象类DefaultBaseService<T :HasID<ID>, ID>
,其中包含一些基本的CRUD方法,如:
override suspend fun update(id: ID, obj: T): T {
obj.id = id
return save(obj)
}
override suspend fun update(id: ID, map: HashMap<String, Any>): T {
/* ... */
return update(id, obj)
}
所以我的服务是这样扩展的:
@Service
class FooService(val fooRepository: FooRepository): DefaultBaseService<Foo, ObjectId>(fooRepository, Foo::class)
我有一个RabbitMQ侦听器类FooListener
,其中注入了这个服务,我正在尝试使用MockK和JUnit进行测试。
我的测试课是这样的
@ExtendWith(MockKExtension::class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@SpringBootTest
class FooListenerTests {
@MockK
lateinit var fooService: FooService
@MockK
lateinit var barService: BarService
@InjectMockKs
lateinit var listener: FooListener
@BeforeAll
fun setUp() = MockKAnnotations.init(this, relaxUnitFun = true)
@Test
fun `should listen do event`() {
coEvery { fooService.create(any()) } returns Templates.foo
coEvery { fooService.save(any()) } returns Templates.foo
coEvery { fooService.update(any(), any<Foo>()) }
coEvery { barService.create(any()) } returns Templates.bar
listener.listenToSomething(Templates.event)
}
}
当我运行测试时,我得到这个错误
Jun 27, 2023 12:16:14 PM io.mockk.impl.log.JULLogger warn
WARNING: Failed to transform class com/numih/mongodb/commons/service/DefaultBaseService
java.lang.IllegalArgumentException: Cannot resolve T from static java.lang.Object com.numih.mongodb.commons.service.DefaultBaseService.update$suspendImpl(?)
我已经尝试使用Mockito而不是MockK,但不断得到相同的错误,我已经有一段时间没有在我的应用程序中创建测试,由于这个错误
我还尝试将any<Foo>()
替换为ofType(Foo::class)
,但生成相同的错误
1条答案
按热度按时间q5iwbnjs1#
您可以将
@MockK
annotation从Spring Starter Test dependency替换为@MockBean
。那么最终的类应该是这样的