Модульное тестирование в Android с использованием JUnit

Опубликовано: 2 Сентября, 2022

Модульное тестирование проводится для того, чтобы разработчики могли писать качественный и безошибочный код. Рекомендуется писать модульные тесты до написания фактического приложения, вы напишете тесты заранее, и фактический код должен будет соответствовать рекомендациям по дизайну, изложенным в тесте. В этой статье мы используем JUnit для тестирования нашего кода. JUnit — это среда « модульного тестирования » для Java-приложений, которая уже включена по умолчанию в Android Studio. Это платформа автоматизации для модульного и пользовательского тестирования. Он содержит такие аннотации, как @Test, @Before , @After и т. д. Здесь мы будем использовать только аннотацию @Test , чтобы статья была легкой для понимания. Обратите внимание, что мы собираемся реализовать этот проект на языке Kotlin .

Пошаговая реализация

Шаг 1: Создайте новый проект

Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать/запустить новый проект в Android Studio». Обратите внимание, что выберите Kotlin в качестве языка программирования.

Шаг 2: Добавьте зависимость в файл build.gradle и нажмите «Синхронизировать сейчас».

    testImplementation “com.google.truth:truth:1.0.1”

   androidTestImplementation “com.google.truth:truth:1.0.1”

Шаг 3: Работа с файлом RegistrationUtil.kt

Создайте новый файл Kotlin RegistrationUtil и выберите его тип в качестве объекта. Поскольку это синглтон, нам не нужно создавать его объект при использовании в других классах. У него есть функция с именем validRegistrationInput , которая требует три аргумента: имя пользователя , пароль и подтверждение пароля. Мы будем тестировать эту функцию с различными наборами входных данных со следующими тестовыми примерами.

  • Имя пользователя, пароль, подтверждение пароля не должны быть пустыми.
  • Пароль должен содержать не менее двух цифр.
  • Пароль совпадает с подтвержденным паролем.
  • Имя пользователя не должно быть занято.

Kotlin




object RegistrationUtil {
 
    private val existingUsers = listOf("Rahul" , "Rohan")
 
    /**
     * The test cases will pass if..
     * ...username/password/confirmPassword is not empty
     * ...password is at least 2 digits
     * ...password matches the confirm Password
     * ...username is not taken
     */
    fun validRegistrationInput(
        userName : String,
        password : String,
        confirmPassword : String
    ) : Boolean {
        // write conditions along with their return statement
        // if username / password / confirm password are empty return false
        if (userName.isEmpty() || password.isEmpty() || confirmPassword.isEmpty()){
            return false
        }
        // if username exists in the existingUser list return false
        if (userName in existingUsers){
            return false
        }
        // if password does not matches confirm password return false
        if (password != confirmPassword){
            return false
        }
        // if digit count of the password is less than 2 return false
        if (password.count { it.isDigit() } < 2){
            return false
        }
        return true
    }
}

Шаг 4: Создайте тестовый класс

Чтобы создать тестовый класс RegistrationUtil , щелкните правой кнопкой мыши RegistrationUtil, затем щелкните «Создать» и выберите тест. Откроется диалоговое окно, в диалоговом окне выберите Testing library как JUnit4 и оставьте имя класса по умолчанию RegistrationUtilTest и нажмите ОК. После этого откроется другое диалоговое окно для выбора каталога назначения, выберите тот, который имеет ..appsrc est. потому что наш тестовый класс не требовать любой контекст из приложения. Ниже приведен снимок экрана, который поможет вам создать тестовый класс.

Шаг 5: Работа с файлом RegistrationUtilTest.kt

Перейдите к файлу RegistrationUtilTest.kt и напишите следующий код. Комментарии добавляются внутри кода, чтобы понять код более подробно.

Kotlin




import com.google.common.truth.Truth.assertThat
import org.junit.Test
 
class RegistrationUtilTest {
    // Write tests for the RegistrationUtil class considering all the conditions
    // annotate each function with @Test
    // We can use backtick to write function name..
    // whatever we write in those backtick will be considered as function name
    @Test
    fun `empty username returns false`(){
        // Pass the value to the function of RegistrationUtil class
        // since RegistrationUtil is an object/ singleton we do not need to create its object
        val result = RegistrationUtil.validRegistrationInput(
            "",
            "123",
            "123"
        )
        // assertThat() comes from the truth library that we added earlier
        // put result in it and assign the boolean that it should return
        assertThat(result).isFalse()
    }
 
    // follow the same for other cases also
    // in this test if username and correctly repeated password returns true
    @Test
    fun `username and correctly repeated password returns true`() {
        val result = RegistrationUtil.validRegistrationInput(
            "Rahul",
            "123",
            "123"
        )
        assertThat(result).isTrue()
    }
 
    // in this test userName already taken returns false
    @Test
    fun `username already taken returns false`() {
        val result = RegistrationUtil.validRegistrationInput(
            "Rohan",
            "123",
            "123"
        )
        assertThat(result).isFalse()
    }
 
    // if confirm password does nt matches the password return false
    @Test
    fun `incorrect confirm password returns false`() {
        val result = RegistrationUtil.validRegistrationInput(
            "Rahul",
            "123",
            "1234"
        )
        assertThat(result).isFalse()
    }
 
    // in this test if password has less than two digits than return false
    @Test
    fun `less than two digit password return false`() {
        val result = RegistrationUtil.validRegistrationInput(
            "Rahul",
            "abcd1",
            "abcd1"
        )
        assertThat(result).isFalse()
    }
}

Шаг 6: Запустите тестовые случаи

Чтобы запустить тестовый пример, нажмите на маленькую иконку запуска рядом с в имя класса, а затем выберите Run RegistrationUtilTest . Если все тестовые случаи пройдены, вы получите зеленую галочку в консоли «Выполнить». В нашем случае все тесты пройдены.

Репозиторий Github здесь .