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 @testable import myModuleName
línea.
Lo intenté
- limpiar el proyecto con OptionClean Build Folder
- comprobar que "Habilitar la capacidad de prueba" (depuración) se estableció en Sí en las Opciones de compilación
- eliminar el objetivo de prueba y luego volver a agregar el paquete de prueba de la Unidad iOS
Nada de esto funcionó para este proyecto (pero he conseguido pruebas para trabajar en otro proyecto). ¿Alguien más ha tenido este problema y lo ha resuelto?
ios
xcode
unit-testing
xctest
Suragch
fuente
fuente
Respuestas:
Verifique el nombre del módulo con el que intenta importar
@testable import "ModuleName"
. El nombre del módulo debe ser el mismo enTarget->Build Settings-> Product Module Name
fuente
space
y_
-
y_
. Uno de mis proyectos tiene menos-
en el nombre, pero el módulo tiene subrayado en su_
lugar""
Expected identifier in import declaration
Build Settings
seleccionar su proyecto (no la prueba o la prueba de IU) y luego busquePRODUCT_MODULE_NAME
lo que aparezca allí, lo que debe ir después@testable import
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:
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 presionado Optiony 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 compilación y desplácese hacia abajo hasta Opciones de compilació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 todas las pruebas unitarias 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
O...
Deje un comentario o una respuesta a continuación si encontró algo más que funcionó.
Relacionado
fuente
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:
fuente
Enable Bitcode
paraNo
el paquete de prueba.Así es como hice que mi código funcione después de probar todas las soluciones sugeridas a partir de sugerencias anteriores.
Y todo funcionó a las mil maravillas. Espero que esto ayude.
fuente
Hay que tener en cuenta que si el nombre de su módulo tiene un carácter de guión
-
, tendrá que referirse 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
se convierte@testable import Ocean_Swift
Solo otra cosa, si usa la
@testable
sintaxis, asegúrese de no incluir su código de producción en su objetivo de prueba. He descubierto que esto causará rarezas inexplicables.fuente
App (Dev)
, el módulo comprobable se convirtióApp__Dev_
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.PRODUCT_MODULE_NAME
valor del objetivo de la prueba debe diferir del de la aplicación.fuente
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.
fuente
@testable import Foo
línea, las pruebas unitarias deberían ejecutarse correctamente.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
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
Funcionó
Espero que ayude
fuente
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 de 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.
fuente
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 con el que desarrollamos (algunas diferencias menores) y después de una fusión, se eliminó de la configuración de prueba.
fuente
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 hay tal módulo".
fuente
En mi caso, tuve 3 problemas. El primero fue que tenía que especificar la ruta de importación en:
El segundo fue que estaba usando Pods y tuve que importar estos pods a mis pruebas también usando:
El tercero ya que estaba usando un encabezado de puente en mi objetivo, por lo tanto, tuve que especificar que el encabezado de puente fuera el mismo para la prueba.
fuente
Mi problema era que la clase que quería probar se suponía que 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!
fuente
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:
Aquí está el archivo de prueba:
fuente
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.
fuente
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 del producto de destino de prueba (YourTestTarget -> Configuración de compilación -> buscar
product module
) no puede ser el mismo nombre que el nombre del proyecto.Una vez que cambié el nombre del módulo del producto para mi objetivo de prueba, todo funcionó.
fuente
Mi solución está aquí
Primero haga clic en OdeAlSwiftUITest.swift, luego marque Project TargetName en la membresía de destino.
fuente
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.
fuente
Intenté todas las respuestas aquí, pero la bandera roja no desapareció. Pero lo hice funcionar simplemente "ejecutando" una prueba vacía independientemente y se aclaró.
Cosas que me gustaría asegurarme de que se hagan:
fuente
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.
fuente
Esto se solucionó cuando cambié el Objetivo de implementación de 9.3 a 11.0.
General> Objetivo de implementación> "11.0"
fuente
Si está utilizando xcodebuild y encuentra este problema, considere agregar un indicador de área de trabajo al comando de compilación.
Cambiado esto
A esto
fuente
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)
fuente
CocoaPods recomienda agregar
inherit! :search_paths
a su objetivo de prueba de la siguiente manera:Fuente: https://github.com/CocoaPods/CocoaPods/pull/8423#issue-244992565
fuente
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.
fuente
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
fuente
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.
fuente