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.

Hacer que la función interna rápida no esté disponible para el destino de prueba.

Quiero crear una función o un convenience init de una clase que no esté disponible para TestTarget cuando se importe con @testable import. No estoy seguro de si es posible, pero estoy buscando cualquier forma de restringirlo.

class A {
   // No debería ser accesible en Test Target
   func foo() {
   }
}

En las pruebas, cuando se hace @testable import, no debería estar disponible.

/
ACTUALIZACIÓN
/*

Declaración del problema

El método de inicialización con Long param se utiliza con convenience methods para proporcionar argumentos por defecto. Sin embargo, en las pruebas, no quiero acceder a ese convenience method con el argumento por defecto, ya que es fácil olvidarse de proporcionar una dependencia simulada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no es posible restringir una función o una inicialización conveniente de una clase para que estén disponibles en TestTarget al importar con @testable import. La palabra clave @testable import está específicamente diseñada para permitir el acceso a detalles de implementación internos de un módulo durante las pruebas, por lo que cualquier función o inicialización marcada como interna o superior también será accesible para el objetivo de prueba.

    Sin embargo, puede haber algunas soluciones alternativas que puedes intentar. Una solución podría ser crear un objetivo separado para tu código de prueba y luego excluir la clase A (y cualquier otra clase que no deseas exponer) de ese objetivo. De esta manera, la clase A y sus métodos solo serán accesibles para el objetivo principal y no para el objetivo de prueba.

    Otra opción podría ser utilizar la compilación condicional para excluir la clase A del objetivo de prueba. Por ejemplo, podrías envolver la clase y sus métodos en un bloque #if !TESTING … #endif, y definir la constante TESTING solo en tu objetivo de prueba. De esta manera, la clase A y sus métodos se excluirán del objetivo de prueba en tiempo de compilación.

    Ten en cuenta que estas soluciones pueden requerir alguna reestructuración de tu código, pero podrían ayudarte a lograr el nivel deseado de control sobre la disponibilidad de tu clase en las pruebas.

Comments are closed.