koin测试结果如下:
org.koin.core.error.NoBeanDefFoundException: No definition found for '<class_name>' has been found. Check your module definitions.
类EmailValidatorUtilImpl实现得很好,
import org.junit.After
import org.junit.Assert
import org.junit.Before
import org.junit.Test
import org.koin.core.context.startKoin
import org.koin.core.context.stopKoin
import org.koin.dsl.module
import org.koin.test.KoinTest
import org.koin.test.inject
class EmailValidatorUtilImpl : EmailValidatorUtil {
private val pattern = Pattern.compile(EMAIL_PATTERN)
private var matcher: Matcher? = null
override fun validateEmail(email: String): Boolean {
matcher = pattern.matcher(email)
return matcher!!.matches()
}
companion object {
private val EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$"
}
}同时,在KoinTest中注入如下所示:
class EmailValidatorUtilImplTest : KoinTest, KoinComponent {
private val validatorUtilImpl: EmailValidatorUtilImpl by inject()
@Before
fun setUp() {
startKoin { module { single { EmailValidatorUtilImpl } } }
}
@Test
fun `is valid email returns true`() {
val isEmailValid = validatorUtilImpl.validateEmail("someone@somewhere.com")
Assert.assertTrue(isEmailValid)
}
@Test
fun `is invalid email returns false`() {
val isEmailValid = validatorUtilImpl.validateEmail("invalid_email")
Assert.assertFalse(isEmailValid)
}
@After
fun tearDown() {
stopKoin()
}
}此外,实现类被很好地注入为
var loginUtilsModule = module {
single { EmailValidatorUtilImpl() }
}在申请课程中:
startKoin {
androidLogger(Level.DEBUG)
androidContext(this@SampleApplication)
modules(listOf(
loginUtilsModule
))
}依赖关系(app/build.gradle):
// di
implementation 'org.koin:koin-androidx-viewmodel:2.0.1'
implementation 'org.koin:koin-androidx-scope:2.0.1'
implementation 'org.koin:koin-android:2.0.1'
// test
testImplementation 'org.mockito:mockito-core:2.28.2'
testImplementation 'org.koin:koin-test:2.0.1'
testImplementation 'junit:junit:4.12'
// android test
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'org.koin:koin-test:2.0.1'发布于 2019-08-19 19:02:24
我发现了这个问题,错误是模块而不是(or.koin.core.KoinApplication) 模块。
@Before
fun setUp() {
startKoin { module { single { EmailValidatorUtilImpl } } }
}因此,解决方案和正确版本如下:
startKoin { modules(loginUtilsModule) }发布于 2020-05-25 11:42:53
我也有同样的问题,但在我的例子中,Koin无法解决接口的实现。我有:
interface MessagesRepository {...}
class MessagesRepositoryImpl : MessagesRepository {...}
class GetMessagesUseCase(private val messagesRepository: MessagesRepository) {...}在Koin模块中,我写道:
single { MessagesRepositoryImpl() }
single { GetMessagesUseCase(get()) }所以Koin找不到MessagesRepository的一个实例来将它注入GetMessagesUseCase。指定单例类型显式解决了问题(但可能有更好的解决方案):
single<MessagesRepository> { MessagesRepositoryImpl() }
single { GetMessagesUseCase(get()) }发布于 2020-07-15 09:33:10
single { MessagesRepositoryImpl() as MessagesRepository }山一郎瑞恩,你能做到的
https://stackoverflow.com/questions/57535800
复制相似问题