Testende Repository-Klasse, die DAO-Parameter akzeptiertAndroid

Forum für diejenigen, die für Android programmieren
Guest
 Testende Repository-Klasse, die DAO-Parameter akzeptiert

Post by Guest »

Ich lerne mit Kotlin, eine Notiz-App zu erstellen. Ich habe eine Repository-Klasse wie unten gezeigt erstellt, die einen Dao-Parameter akzeptiert. Im Moment ist die Datenquelle nur Dao, aber in dem Tutorial, dem ich folge, wird auch eine API-Klasse aufgerufen.
Was ich wissen möchte, ist, wie ich Repository-Klassen teste Logik?

Code: Select all

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)
}

}
Mein Test besteht, aber er ist zu 100 % identisch mit der Art und Weise, wie ein Dao getestet werden würde, außer dass ich ein Repo-Objekt verwende, was mich wundert, ob ich es richtig mache oder nicht:
Ist es möglich, die Datenbank/DAO zu verspotten, damit ich sie ausspionieren kann, um sicherzustellen, dass sie aufgerufen werden und so?

Code: Select all

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)
}

}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post