Имея логику TDD и пытаясь понять, как писать модульные тесты, у меня возникли проблемы с объектом Kotlin.Тест пройден, но я не уверен, что это действительно правильный тест.Я пытаюсь убедиться, что метод Logger.i () вызывается и что он сохраняется в базе данных.Но в данный момент я застрял в только что вызванной части.
Мой объект
object Logger {
fun i(tag: String, msg: String, tr: Throwable? = null): Int {
insertIntoLogDatabase(createLogModel("i", tag, msg, tr))
return if (BuildConfig.DEBUG) Log.i(tag, msg, tr) else 0
}
private fun insertIntoLogDatabase(log: LogModel) {
//Insert into Log DB
logRepo.upsert(log)
}
private fun createLogModel(type: String, tag: String, msg: String, tr: Throwable?) = LogModel(0, type, tag, msg, if (tr != null) tr.message + "\n" + tr?.stackTrace.contentToString() else null)
fun setLogRepo(logRepo: LogRepository) {
this.logRepo = logRepo
}
}
с этим, я знаю, что мне нужно вызвать Logger.setLogRepo (logRemp), чтобы дать Loggerдоступ к репо (и это работает)
Где я застрял, я пытаюсь провести модульное тестирование вызова метода Log.i
У меня есть это
@Mock
lateinit var log: Logger
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
Logger.setLogRepository(logRepo)
}
@Test
fun `log i failed`() {
// When
log.i("Test", "Test1")
// Then
verify(log, times(1)).i("Test", "Test1")
}
Я имею в виду, что это работает, но верно ли это (моя интуиция говорит мне, что что-то не так, что я на самом деле не тестирую метод Logger.i ()
, пожалуйста, сообщите.
Спасибо.