How am I supposed to mock DB in tests using technologies mentioned in question? None of my solutions work.
The code below returns weird error:
database org.jetbrains.exposed.sql.Database@134ff8f8 don’t have any transaction manager
class UrlShortenerServiceTest : KoinTest {
private val testModule = module {
single<Cache<String, String>> { mockk(relaxed = true) }
single<Database> { mockk(relaxed = true) }
single<TransactionManager> { mockk(relaxed = true) }
single { UrlShortenerService(get(), get()) }
single<TransactionManager> { mockk(relaxed = true) }
}
private val urlShortenerService: UrlShortenerService by inject()
private val mockCache: Cache<String, String> by inject()
private val mockDb: Database by inject()
private val mockTransactionManager: TransactionManager by inject()
@BeforeTest
fun setup() {
startKoin {
modules(testModule)
}
}
@AfterTest
fun tearDown() {
stopKoin()
}
@Test
fun `test url shortener `(){
val longUrl = "http://www.test.com"
val result = urlShortenerService.shortenUrl(longUrl)
assertNotNull(result)
assertFalse(result.isEmpty())
verify { mockCache.put(any(), any()) }
verify {
transaction(mockDb) {
UrlMapping.insert { any() }
}
}
}
I completely do not understand what is it and why it is not working. I suppose ChatGPT returned me some wrong code which was written by someone. WHat is a fix?