es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Android. Pruebas unitarias para SpannableString.

Para probar mi lógica de negocio, estoy utilizando la biblioteca Mockk. Pero también tengo algunas clases auxiliares que contienen métodos que utilizan SpannableString, ForegroundColorSpan, etc. También necesito escribir pruebas para estos métodos. Sin embargo, no entiendo muy bien cómo escribir tales pruebas correctamente, ya que antes solo escribía pruebas para la lógica de negocio. ¿Puedo escribir una prueba para una SpannableString usando Mockk? Desafortunadamente, no he encontrado buenos ejemplos que demuestren cómo escribir tales pruebas. Por favor, ayúdeme.
Aquí tienes un ejemplo de código para el cual necesito escribir pruebas:

fun formatSum(sum: Double): SpannableString {
    return SpannableString(sum.toString()).apply {
        if (ceil(sum) != sum) {
            setSpan(
                ForegroundColorSpan(getColor(R.color.red)),
                sum.toString().length - 2,
                sum.toString().length,
                0
            )
        }
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible escribir pruebas para los métodos que utilizan SpannableString y ForegroundColorSpan utilizando la biblioteca mockk. Para probar dichos métodos, puedes crear un objeto mockk para las clases SpannableString y ForegroundColorSpan requeridas y verificar las interacciones entre ellos utilizando la biblioteca mockk. Aquí tienes un ejemplo de cómo puedes escribir pruebas para el código anterior:

    class FormatterTest {
    
        private lateinit var context: Context
    
        @Before
        fun setUp() {
            context = mockk<context>()
            mockkStatic(ContextCompat::class)
            every { ContextCompat.getColor(context, any()) } returns 0 // Reemplazar por el valor de color real
        }
    
        @Test
        fun `should format sum with red color if it has decimals`() {
            val sum = 10.5
    
            val result = formatSum(sum)
    
            assertEquals(result.length, sum.toString().length)
            assert(result.getSpans(0, result.length, ForegroundColorSpan::class.java).isNotEmpty())
        }
    
        @Test
        fun `should format sum with default color if it has no decimals`() {
            val sum = 10.0
    
            val result = formatSum(sum)
    
            assertEquals(result.length, sum.toString().length)
            assert(result.getSpans(0, result.length, ForegroundColorSpan::class.java).isEmpty())
        }
    }
    

    En el código anterior, hemos creado un objeto mockk para la clase Context y hemos simulado el método estático getColor para que devuelva un color. En las pruebas, hemos verificado que el método formatSum formatea la suma correctamente y establece el ForegroundColorSpan para la parte decimal del número si existe. También podemos verificar que no establece el ForegroundColorSpan si no hay decimales en el número.

    Puedes utilizar técnicas similares para escribir pruebas para otros métodos que utilicen SpannableString y ForegroundColorSpan.

Comments are closed.