tutorial sobre leyes las hay falta exportación documentación disponibles descargar cumplimiento compilaciones codigo code ios xcode unit-testing xctest

ios - sobre - "No existe tal módulo" cuando se usa @testable en las pruebas de la Unidad Xcode



testflight tutorial (24)

Además de las otras cosas enumeradas, tuve que agregar el archivo con la clase que estaba tratando de probar a mis fuentes de compilación para el módulo de prueba unitaria

Recientemente actualicé a Xcode 7 beta 5. Intenté agregar una prueba unitaria a un proyecto anterior, pero recibo el mensaje de error "No hay tal módulo [myModuleName]" en la línea @testable import myModuleName .

Lo intenté

  • limpiar el proyecto con la carpeta de compilación de opción limpia
  • comprobar que "Habilitar la capacidad de prueba" (depuración) se estableció en Sí en las Opciones de compilación
  • eliminar el objetivo de las pruebas y luego volver a agregar el paquete de pruebas de la Unidad iOS

Nada de esto funcionó para este proyecto (pero he obtenido pruebas para trabajar en otro proyecto). ¿Alguien más tuvo este problema y lo resolvió?


Aquí hay otra cosa para verificar que no está en la lista. Para mí, tenía algo que ver con mi equipo, ¡tal vez porque el agente de nuestro equipo aún no había aceptado el último Acuerdo de licencia! Una vez que seleccioné un equipo diferente en la configuración general de mi objetivo, y luego especifiqué un objetivo de implementación específico como 12.1 u 11.0, de repente desapareció la advertencia "No existe tal módulo".


Así es como hice que mi código funcione después de probar todas las soluciones sugeridas de sugerencias anteriores.

  • Establecí ''Habilitar la capacidad de prueba'' en ''SÍ'' en la Configuración de compilación del proyecto
  • También configuré ''Define Module'' a ''YES'' en la configuración de compilación de mi proyecto.
  • Para los archivos .swift normales dentro de mi proyecto, por ejemplo, MyApp , iba a escribir casos de prueba, tengo marcados los objetivos principales " MyApp " y " MyAppUnitTests " en Target Membership .
  • Luego seleccioné mi (s) archivo (s) de prueba de unidad, declaré '' @testable import MyApp '' en la parte superior, debajo de '' import XCTest '', y solo verifiqué "MyAppUnitTests" en Membresía de Target

Y todo funcionó a las mil maravillas. Espero que esto ayude.


Asegúrese de que bajo la configuración de compilación del esquema de prueba, el objetivo de la prueba esté en la lista.

Junto al botón de reproducción, seleccione el esquema de prueba, luego Editar esquema ..., vaya a la sección Construir, haga clic en más + y seleccione el objetivo con el que desea probar.

En mi caso, tenemos un objetivo interno que desarrollamos con (algunas diferencias menores) y después de una fusión, se eliminó de la configuración de prueba.


Como se describe en esta respuesta , estaba agregando pruebas Swift a un proyecto solo Obj-C. La solución fue agregar una clase Swift ficticia, después de lo cual Xcode solicitaría agregar un encabezado de puente y luego eliminar la clase Swift. Todo estuvo bien después de eso.


Compruebe el nombre del módulo que intenta importar con @testable import "ModuleName" . El nombre del módulo debe ser el mismo en Target->Build Settings-> Product Module Name


Creo que esto puede haber sucedido porque eliminé las pruebas de ejemplo.

Quité el paquete de prueba de la Unidad y luego lo volví a agregar como se muestra en las imágenes a continuación y todo volvió a estar bien.


Después de pasar un par de días en estos temas, finalmente llego a trabajar con mi proyecto. El problema estaba en el Encabezado de puente: la ruta en el objetivo Pruebas no puede estar vacía si está usando el Encabezado de puente en su objetivo principal

Espero que ahorre algo de tiempo para alguien.


El problema para mí fue que el objetivo de implementación de iOS de las pruebas no estaba configurado para ser el mismo que el objetivo principal. Así que asegúrese de verificar esto.

En su objetivo de prueba:

Build Settings -> iOS Deployment Target -> iOS<same as the target you are testing>


En el objetivo de prueba de configuración de compilación, verifique la prueba de host, toma el nombre establecido en PRODUCT_NAME. Es ese nombre el que debes usar en las clases de prueba.

Recomiendo no cambiar PRODUCT_NAME (nombre del objetivo principal)


Esto parece ser un error con la configuración de compilación de ambos objetivos. Debe asegurarse de que:

  • ENABLE_TESTABILITY es igual a Sí para ambos objetivos.
  • El valor de PRODUCT_MODULE_NAME del objetivo de prueba debe diferir del valor de la aplicación.

Esto se solucionó cuando cambié el Objetivo de implementación de 9.3 a 11.0.

General> Objetivo de implementación> "11.0"


Mi problema era que se suponía que la clase que quería probar estaba en un módulo separado (Cliente API), pero la clase era en realidad un miembro del objetivo de la aplicación y no el objetivo del marco. ¡Cambiar la membresía objetivo de la clase hizo que el error de importación desapareciera!


Mi solución está aquí

Primero, haga clic en OdeAlSwiftUITest.swift, luego marque Project TargetName en la membresía de destino.


Otra cosa que debe verificar: si tiene un proyecto Objective-C, pero está escribiendo pruebas unitarias en Swift, ¡asegúrese de que el objetivo principal use al menos un archivo Swift!

Más información:

Estaba trabajando en un proyecto Objective-C, pero quería escribir pruebas unitarias en Swift.

Agregué un archivo Swift al objetivo principal para generar el archivo ProjectName-Bridging-Header.h necesario, escribí mis pruebas y todo funcionaba correctamente.

Más tarde eliminé el archivo Swift porque pensé que no lo necesitaba (todo el código del objetivo principal está en Objective-C ... Solo estaba escribiendo pruebas en Swift).

No noté un problema hasta más tarde, después de que hice una "carpeta de compilación limpia / limpia" y apareció el problema "No hay tal módulo". Después de rascarme la cabeza, agregué un nuevo archivo Swift en blanco y el problema desapareció.

Lo he probado varias veces con / sin el archivo Swift, y solo funciona con él ... por lo tanto, tendré que dejar el archivo en blanco en el proyecto, convertir algunos Objective-C en Swift o agregar algunos nuevo código para el proyecto escrito en Swift.


Para aquellos que se han desplazado hasta la última respuesta y todavía nada funcionó, esto es lo que hizo por mí después de seguir todos los consejos de otras respuestas. Estoy usando Xcode 11:

Lo que causó el problema en mi caso fue que cambié el nombre de mi producto

  1. Cambié el nombre de mi producto en la configuración de compilación de mi objetivo principal a "Nuevo nombre"
  2. Tuve que volver a seleccionar la aplicación de host para mi objetivo de prueba
  3. No sabía que cambiar el nombre del producto también cambiaría el Nombre del módulo del producto , que es el que se usa para importar el módulo en mis archivos de prueba. Cambié mi importación de la siguiente manera:

    @testable import New_Name

  4. Funcionó

Espero que ayude


Para mí, la solución fue cambiar el nombre de @testable import myproject_ios a @testable import myproject después de haber actualizado el nombre del producto de destino myproject-ios en Build Settings / Packaging / Product Name / de $ {TARGET_NAME} a myproject.


Seguí los pasos anteriores, que funcionaron. Sin embargo, mi proyecto tuvo algunos problemas más. Recibí esta advertencia y no pude acceder a las clases de mi proyecto principal para probar en mi objetivo de prueba.

Descubrí que el Nombre del módulo de producto de destino de prueba (YourTestTarget -> Configuración de compilación -> buscar product module ) no puede ser el mismo nombre que el nombre de su proyecto.

Una vez que cambié el nombre del módulo del producto para mi objetivo de prueba, todo funcionó.


Si está utilizando xcodebuild y encuentra este problema, considere agregar un indicador de área de trabajo al comando de compilación.

Cambiado esto

$ xcodebuild -scheme PowToonsTests -destination ''name=iPhone X'' test

A esto

$ xcodebuild -workspace PowToons.xcworkspace -scheme PowToonsTests -destination ''name=iPhone X'' test


Tuve el mismo problema. La limpieza de la carpeta de compilación y el reinicio de Xcode no funcionaron.

Lo que funcionó para mí fue asegurarme de que la configuración de "Construir solo arquitectura activa" de su objetivo y esquema de prueba coincida con la configuración del objetivo y esquema de su aplicación.


Una cosa que debes tener en cuenta es que si el nombre de tu módulo tiene un carácter de guión - entonces deberás referirte a él con una barra inferior _ . Por alguna razón sospeché que esto podría ser un problema y de hecho fue mi problema.

p.ej. @testable import Ocean-Swift convierte en @testable import Ocean_Swift

Solo otra cosa, si usa la sintaxis @testable asegúrese de no incluir su código de producción en su objetivo de prueba. He descubierto que esto causará rarezas inexplicables.


Haga clic en MyAppTests.swift en el navegador del proyecto y haga clic en el panel derecho, verifique su módulo en Membresía de destino. Funciona en el mio.


Entorno: Xcode versión 9.0 (9A235)
Escenario: Prueba de un marco de código abierto.

Tuve el mismo problema: ''No hay tal módulo''.

Solución:

  1. Seleccione el objetivo de prueba.
  2. Seleccione Build Fases
  3. Agregue el marco a probar a través de Link Binary ...

Aquí está el archivo de prueba:


La respuesta que me funcionó

La respuesta fue que tuve algunos errores en mi proyecto que estaban haciendo que fallara la compilación. (Era solo su error estándar de todos los días en el código). Después de que solucioné los errores e hice otra limpieza y compilación, funcionó.

Tenga en cuenta que estos errores no aparecieron al principio. Para que aparezcan:

  • Comente todo su archivo de prueba que le está dando el error "No hay tal módulo".
  • Intenta ejecutar tu proyecto nuevamente.

Si hay otros errores, deberían aparecer ahora. Corríjalos y luego descomente su código de archivo de prueba. El error "No hay tal módulo" desapareció para mí.

En caso de que esto no resuelva el problema para otras personas, también puede intentar lo siguiente:

Limpia la carpeta de compilación

Abra el menú Producto, mantenga presionada la tecla Opción y haga clic en "Limpiar carpeta de compilación ..."

Asegúrese de que Habilitar capacidad de prueba esté configurado en Sí

En el Navegador de proyectos, haga clic en el nombre de su proyecto. Seleccione Configuración de construcción y desplácese hacia abajo hasta Opciones de construcción. Asegúrese de que Habilitar la capacidad de prueba es Sí (para la depuración).

Eliminar y volver a agregar su objetivo de Pruebas

Si has hecho las otras cosas, supongo que probablemente no necesites hacer esto. Pero si lo hace, recuerde guardar cualquier Prueba de Unidad que ya haya escrito.

Haga clic en el nombre de su proyecto en el Navegador de proyectos. Luego seleccione su objetivo de Pruebas. Haga clic en el botón menos (-) en la parte inferior para eliminarlo.

Luego haga clic en el botón más (+) y elija Paquete de prueba de unidad iOS para agregarlo nuevamente. Como puede ver, también puede agregar un paquete de prueba de IU de la misma manera.

Algunas otras ideas

  • Asegúrese de que todas las clases requeridas sean miembros de su objetivo de prueba.
  • Asegúrese de haber agregado todas las bibliotecas necesarias.
  • Asegúrese de que el nombre del módulo esté escrito correctamente (vea esta respuesta ).

O...

Deje un comentario o una respuesta a continuación si encontró algo más que funcionó.

Relacionado