Модульное тестирование с помощью Mockito и Firebase KotlinAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Модульное тестирование с помощью Mockito и Firebase Kotlin

Сообщение Anonymous »


Я пытаюсь написать модульные тесты для моего класса Kotlin, который записывает и считывает значения из Firebase. Я пробовал писать тесты разными способами, но с Firebase всегда получал ошибки. Это мой класс репозитория:

пакет mainPackage.model импортировать com.google.firebase.firestore.FirebaseFirestore импортировать android.util.Log импортировать com.google.firebase.firestore.FirebaseFirestoreException импортировать mainPackage.utils.Checks const val TAG = "FIRESTORE" класс RepositoryMockup { //-------------------------------- //Функции Firebase fun writeNewUser(pass: String, email: String, isATeacher: Boolean?) { база данных val = FirebaseFirestore.getInstance() val myRef = data.collection("Пользователи").document(электронная почта) val newUser = hashMapOf( от «is_a_teacher» до isATeacher, «пройти», чтобы пройти ) myRef.set(новыйпользователь) .addOnSuccessListener { Log.d(TAG, "Пользователь успешно добавлен") } .addOnFailureListener { e -> Log.w(TAG, «Ошибка записи пользователя», e) } } //Проверено и исправлено весело userLogin(пользователь: Пользователь, обратный вызов: (Проверки) -> Единица) { база данных val = FirebaseFirestore.getInstance() val myRef = data.collection("Пользователи").document(user.email.toString()) myRef.get() .addOnSuccessListener {документ -> if (document != null && document.exists()) { val pass = document.get("pass") как строка если (пароль == пользователь.пароль) { обратный вызов(Проверки.ПАССЕДИРОВАНО) } еще { обратный вызов (Проверки.FAILED_CHECK) } Log.d(TAG, «Проход успешно проверен») } еще { обратный вызов (Проверки.NEW_USER_CREATED) Log.d(TAG, «Пусто») writeNewUser(user.password.toString(), user.email.toString(), user.isATeacher) } } .addOnFailureListener {исключение -> if (исключением является FirebaseFirestoreException) { Log.e(TAG, «Ошибка получения документа:», исключение) } обратный вызов (Проверки.FAILED_CHECK) } } весело userLoginTest (пользователь: UserTest, обратный вызов: (Проверки) -> Unit) { база данных val = FirebaseFirestore.getInstance() val myRef = data.collection("Пользователи").document(user.email.toString()) myRef.get() .addOnSuccessListener {документ -> if (document != null && document.exists()) { val pass = document.get("pass") как строка если (пройти == user.pass) { обратный вызов(Проверки.ПАССЕДИРОВАНО) } еще { обратный вызов (Проверки.FAILED_CHECK) } Log.d(TAG, «Проход успешно проверен») } еще { обратный вызов (Проверки.NEW_USER_CREATED) Log.d(TAG, «Пусто») writeNewUser(user.pass.toString(), user.email.toString(), user.isATeacher) } } .addOnFailureListener {исключение -> if (исключением является FirebaseFirestoreException) { Log.e(TAG, «Ошибка получения документа:», исключение) } обратный вызов (Проверки.FAILED_CHECK) } } //Проверено и исправлено весело readNameSurnameByEmail (электронная почта: String, обратный вызов: (String) -> Единица){ база данных val = FirebaseFirestore.getInstance() val myRef = data.collection("Пользователи").document(электронная почта) myRef.get() .addOnSuccessListener {документ -> если (документ != ноль) { val fieldValue = document.get("name_surname") как строка обратный вызов (значение поля) Log.d(TAG, «Имя и фамилия успешно прочитаны») } еще { Log.d(TAG, «Пусто») } } .addOnFailureListener {исключение -> if (исключением является FirebaseFirestoreException) { Log.e(TAG, «Ошибка получения документа:», исключение) } } } //Проверено весело readIsATeacherByEmail(электронная почта: String): Boolean { база данных val = FirebaseFirestore.getInstance() val myRef = data.collection("Пользователи").document(электронная почта) вар полеЗначение = ложь myRef.get() .addOnSuccessListener {документ -> если (документ != ноль) { fieldValue = document.get("is_a_teacher") как логическое значение Log.d(TAG, «Имя и фамилия успешно прочитаны») } еще { Log.d(TAG, «Пусто») } } .addOnFailureListener {исключение -> if (исключением является FirebaseFirestoreException) { Log.e(TAG, «Ошибка получения документа:», исключение) } } вернуть значение поля } //Проверено fun writeOfficeHoursInstance (электронная почта: String, timeFrom: String, timeTo: String) { база данных val = FirebaseFirestore.getInstance() вар идентификатор = "" val myRef = data.collection("OfficeHoursInstance").document() идентификатор = myRef.id val newInstance = hashMapOf( «электронная почта» на электронную почту, «time_from» на timeFrom, «time_to» на timeTo, «идентификатор» к идентификатору ) myRef.set(новыйэкземпляр) .addOnSuccessListener { Log.d(TAG, «Экземпляр успешно добавлен») } .addOnFailureListener { e -> Log.w(TAG, «Ошибка записи экземпляра», e) } } //Проверено и исправлено весело readOfficeHoursInstanceTeacher (электронная почта: String, обратный вызов: (MutableList) -> Unit){ вар timeFrom = "" вар timeTo = "" вар userEmail = "" код вар = "" список вар = mutableListOf() база данных val = FirebaseFirestore.getInstance() val ref = data.collection("OfficeHoursInstance") .whereEqualTo("электронная почта", электронная почта) ref.get() .addOnSuccessListener { документы -> for (документ в документах) { timeFrom = document.get("time_from") как строка timeTo = document.get("time_to") как строка userEmail = document.get("электронная почта") как строка code = document.get("id") как строка list.add(OfficeHoursInstance(userEmail, timeFrom, timeTo, код)) Log.d(TAG, «Экземпляр времени успешно прочитан») } обратный вызов (список) } .addOnFailureListener {исключение -> if (исключением является FirebaseFirestoreException) { Log.e(TAG, «Ошибка получения документа:», исключение) } } } весело updateUserOfficeHoursList (электронная почта: String, код: String) { база данных val = FirebaseFirestore.getInstance() val ref = data.collection("Пользователи").document(электронная почта) список вар = "" ref.get() .addOnSuccessListener {документ -> если (документ != ноль) { list = document.get("office_hours_list") как строка Log.d(TAG, «список_office_hours_list успешно прочитан») } еще { Log.d(TAG, «Пусто») } } .addOnFailureListener {исключение -> if (исключением является FirebaseFirestoreException) { Log.e(TAG, «Ошибка получения документа:», исключение) } } если (list.isEmpty()){ список = код } еще { список + ", " + код } ref.update("office_hours_list", список) }

Можете ли вы подсказать мне, как написать модульный тест для моих методов БД? Или показать мне структуру?

Вот что у меня есть, но оно не работает:
пакет mainPackage.tests импортировать com.google.firebase.firestore.FirebaseFirestore импортировать com.google.firebase.firestore.DocumentSnapshot импортировать com.google.firebase.firestore.FirebaseFirestoreException импортировать mainPackage.model.RepositoryMockup импортировать mainPackage.model.UserTest импортировать mainPackage.utils.Checks импортировать org.junit.Assert.* импортировать org.junit.Before импортировать org.junit.Test импортировать org.mockito.Mock импортировать org.mockito.Mockito импортировать org.mockito.MockitoAnnotations класс RepositoryMockupTest { частный lateinit var репозиторийMockup: RepositoryMockup @Насмехаться частный lateinit var firebaseFirestore: FirebaseFirestore @Насмехаться частный lateinit var documentSnapshot: DocumentSnapshot @До забавная установка() { MockitoAnnotations.initMocks(это) репозиторийMockup = РепозиторийMockup() } @Тест весело testWriteNewUser() { репозиторийMockup.writeNewUser("пароль", "электронная почта", true) Mockito.verify(firebaseFirestore).collection("Пользователи").document("электронная почта") } @Тест весело testUserLogin_Passed() { val user = UserTest("[email protected]", "password123", true) Mockito.`when`(firebaseFirestore.collection("Пользователи").document("email").get()) .thenReturn(снапшот документа) Mockito.`when`(documentSnapshot.exists()).thenReturn(true) Mockito.`when`(documentSnapshot.get("pass")).thenReturn("пароль") вар проверка = Checks.FAILED_CHECK репозиторийMockup.userLoginTest(пользователь) { проверить = это } AssertEquals(Checks.PASSED, проверка) } @Тест весело testUserLogin_FailedCheck() { val user = UserTest("[email protected]", "неправильный_пароль", true) Mockito.`when`(firebaseFirestore.collection("Пользователи").document("user.email").get()) .thenReturn(снапшот документа) Mockito.`when`(documentSnapshot.exists()).thenReturn(true) Mockito.`when`(documentSnapshot.get("pass")).thenReturn("пароль") вар проверка = Checks.PASSED репозиторийMockup.userLoginTest(пользователь) { проверить = это } AssertEquals (Проверки.FAILED_CHECK, проверка) } // @Тест // весело testUserLogin_NewUserCreated() { // val user = UserTest("электронная почта", "пароль", true) // Mockito.`when`(firebaseFirestore.collection("Пользователи").document("user.email").get()) // .thenReturn(снапшот документа) // Mockito.`when`(documentSnapshot.exists()).thenReturn(false) // проверка var = Checks.PASSED // репозиторийMockup.userLoginTest(пользователь) { // проверка = это // } // AssertEquals(Checks.NEW_USER_CREATED, проверка) // } } личное развлечение Any.thenReturn(documentSnapshot: DocumentSnapshot) { }
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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