我有一个服务:
@Service
class ArchiveService(
val fnaReactiveClient: FNAReactiveClient,
val resolvedTopicPrefix: String)
我有Config:
@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
class CoreKafkaConfig {
@Value("\${kafka.topicPrefix:}")
lateinit var topicPrefix: String
@Bean
fun resolvedTopicPrefix() = run {
KafkaTopicsUtil.resolveTopicPrefix(topicPrefix)
}
在我的测试中:
@ExtendWith(MockitoExtension::class)
class ArchiveServiceTest {
@InjectMocks
lateinit var archiveService: ArchiveService
@Mock
lateinit var fnaReactiveClient: FNAReactiveClient
@Test
fun `create archive with duplicate filenames`() {
val user = "user"
... some when and given block ....
val newDocVer = archiveService.archiveDoc("integration", null, req, ecmHeaders, EcmServiceAsyncConfig.MethodType.ARCHIVE)
assertEquals(newId, newDocVer)
... some verify block ....
}
}
我有一个例外:
无法示例化类型为'class tu.xxxx.ecm.services.service. ArchiveService'的名为'archiveService'的@InjectMocks字段。您在字段声明时没有提供示例,因此我尝试构造示例。但是构造函数或初始化块引发了异常:指定为非null的参数为null:方法tu.xxx.ecm.services.service.ArchiveService.,参数resolvedTopicPrefix
我做错了什么????
1条答案
按热度按时间vyswwuz21#
问题是你需要两个参数来创建
ArchiveService
。但是...只定义了一个mock。记住,在执行单元测试时,不会创建bean,也不会执行Spring DI注入。所以,你能做什么.事实上-不是很多.请看这个线程:Injecting a String property with @InjectMocks
然而,有一些变通方法,人们可能会争论这种方法的可读性。
因此,我建议不要在测试中使用
@InjectMock
: