Тестирование класса репозитория, который принимает параметр DAOAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Тестирование класса репозитория, который принимает параметр DAO

Сообщение Anonymous »

Я изучаю Kotlin, чтобы создать приложение для заметок. Я создал класс репозитория, как показано ниже, который принимает параметр Dao. На данный момент источником данных является только Dao, но в учебнике, которому я следую, он также вызывает класс API.
Я хочу знать, как тестировать классы репозитория. логика?
import androidx.lifecycle.LiveData
import com.example.lastnotetakingapp.db.daos.NoteDao
import com.example.lastnotetakingapp.db.models.Note

class NotesRepo(private val notesDao: NoteDao) {

val allNotes: LiveData = notesDao.getAllNotes()

suspend fun addNewNote(note: Note): Long {
return notesDao.addNewNote(note)
}

}

Мой тест проходит успешно, но он на 100% идентичен способу тестирования Dao, за исключением того, что я использую объект репо, что заставляет задуматься, правильно ли я это делаю или нет:
p>
Возможно ли издеваться над базой данных/DAO, чтобы я мог шпионить за ними, чтобы убедиться, что они вызываются и все такое?
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
import androidx.room.Room
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.example.lastnotetakingapp.db.NoteDB
import com.example.lastnotetakingapp.db.daos.NoteDao
import com.example.lastnotetakingapp.db.models.Note
import com.example.lastnotetakingapp.testHelpers.getOrAwaitValue
import com.google.common.truth.Truth
import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class NotesRepoTest {

private lateinit var dao: NoteDao
private lateinit var db: NoteDB
private lateinit var notesRepo: NotesRepo

@get:Rule
var instantTaskExecutorRule = InstantTaskExecutorRule()

@Before
fun setUp(){
db = Room.inMemoryDatabaseBuilder(
ApplicationProvider.getApplicationContext(),
NoteDB::class.java,
).allowMainThreadQueries().build()
dao= db.noteDao
notesRepo = NotesRepo(dao)
}

@After
fun tearDown(){
db.close()
}

@Test
fun saveNotesTest(): Unit = runBlocking{
val note = Note(0, "tupac", "content", 0)

val id : Long = notesRepo.addNewNote(note)
Truth.assertThat(id).isEqualTo(1)

val notes = notesRepo.allNotes.getOrAwaitValue()

val noteOne: Note? = notes?.get(0)
Truth.assertThat(notes?.size).isEqualTo(1)
Truth.assertThat(noteOne?.title).isEqualTo(note.title)
Truth.assertThat(noteOne?.content).isEqualTo(note.content)
Truth.assertThat(noteOne?.viewed).isEqualTo(false)
}

}


Подробнее здесь: https://stackoverflow.com/questions/730 ... -parameter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»