swift - the - No se puede cargar el módulo subyacente para XCTest
the swift programming language pdf (12)
Acaba de agregar su archivo / clase de pruebas al objetivo principal y no al objetivo de la prueba por error. Simple como eso.
Solución:
1) Elimine el archivo de prueba de la lista "Compilar orígenes" en la pestaña "Fases de compilación" para el objetivo principal
2) Agregue el mismo archivo en "Compilar orígenes" en la pestaña "Fases de compilación" para el objetivo de prueba
Debe resolver el problema.
Estoy trabajando rápidamente en Xcode y, de forma predeterminada, crea un archivo de prueba que hace referencia a XCTest.
Cuando configuro la membresía de destino para mi proyecto principal, causa este error
No se puede cargar el módulo subyacente para XCTest
Si no se establece esta membresía de destino, las pruebas se ejecutan correctamente y todo funciona bien.
PD: Soy nuevo en Swift y probablemente sea una pregunta tonta (por favor, ilumíneme)
Asegúrese de que la Membresía de destino esté marcada para todos los módulos cuando se seleccione el marco de prueba. Puede ver la opción de Membresía de destino seleccionando Ver-> Utilidades-> Mostrar inspector de archivos
Después de un montón de solución de problemas y rebotando en las páginas de como esta, pude encontrar un detalle que no se mencionó en las otras páginas de solución de problemas de prueba de unidad iOS.
Si su proyecto usa CocoaPods, asegúrese de incluir su objetivo de prueba anidado dentro del objetivo de su aplicación principal.
Es posible que su podfile no lo incluya si creó su objetivo de prueba
después de
ejecutar
pod init
.
Su podfile debería verse así:
target ''YourApp'' do
target ''YourAppTests'' do
inherit! :search_paths
# Pods for testing
end
end
Recuerde guardar su podfile y ejecutar
pod install
después de hacerlo.
¡Espero eso ayude!
El proyecto principal no se vincula con el marco XCUnit. Debe crear un objetivo de prueba separado para su proyecto, si aún no existe, y agregar sus archivos de origen de prueba a ese objetivo.
- Seleccione su proyecto en el Navegador de proyectos. Esto abrirá la configuración del proyecto en el editor.
- Haga clic en el botón "+" en la parte inferior de la columna que enumera sus objetivos.
-
Si está trabajando en una plantilla de proyecto iOS , seleccione
iOS > Test > iOS Unit Testing Bundle
.Si está trabajando en una plantilla de proyecto OS X , seleccione
OS X > Test > OS X Unit Testing Bundle
Este problema ocurre dos veces en su proyecto.
- Cuando no agrega UnitTestingBundle en su proyecto cuando crea un nuevo proyecto.
- Cuando instalas CocoaPods en tu proyecto en algún momento, no siempre.
1: respuesta:
-
Ir al archivo Haga clic en Archivo.
-
Luego verá Primera opción Nuevo Haga clic en ella.
-
Después de hacer clic en él, verá Algunas opciones Haga clic en Destino.
-
Y luego, en la barra de búsqueda, se resuelve el paquete de prueba de la unidad IOS y el problema Agregar.
-
si el compilador no puede darle permiso para agregar esto, intente con el segundo método cuando se indica a continuación.
2. Responda al problema de CocoaPod:
-
Ir al producto Haga clic en el producto.
-
Haga clic en limpiar o presione cmd + k.
-
El problema está resuelto.
Hice todo lo anterior, pero aún no se me permitió acceder a los métodos que quería probar. Pero antes de escribir cualquier caso de prueba construí el proyecto una vez y luego los métodos fueron accesibles para probar. Así que pruébalo y avísame si resolvió algún problema.
Recibo este error si creo un objetivo de marco dinámico de macOS, que se vincula a
XCTest.framework
(¡el objetivo es un objetivo de marco, no un objetivo de prueba!).
En este caso, el problema se resuelve agregando
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks
a "Configuración de compilación / Rutas de búsqueda de marco" del proyecto.
Si bien la respuesta aceptada resuelve este problema la mayoría de las veces, hay una forma más de encontrar este error.
Si ya te has asegurado de que:
Como lo señalaron @pwc @ nick-ny otros
-
El archivo
ClassTest.swift
para la membresía de destino asegurándose de que solo se adjunte al objetivo de prueba. -
ClassTest.swift
no está visible debajo del objetivo principal de la aplicación> Generar orígenes> Compilar orígenes
Esto es lo que más puede verificar:
en su archivo
.podspecs
Asegúrese de que su
source_files
no incluye directa o indirectamente el directorio de prueba.
por ejemplo :
s.source_files = ["Classes/**/*.{swift}", "Classes/**/*.{xib}"]
s.exclude_files = ["Classes/Exclude", "Classes/MyPodProjTests/"]
Tenga en cuenta que
Classes/**/*.{swift}
incluye todo lo que
MyPodProjTests
el hecho de que el directorio
MyPodProjTests
debe excluirse.
Solución:
s.source_files = ["Classes/MyPodProj/**/*.{swift}", "Classes/**/*.{xib}"]
Nota: Este es un caso extremadamente extremo y un error completamente humano, pero pensé que valdría la pena señalarlo.
Tal vez sea un poco tarde, pero lo que tienes que hacer es:
Haga clic en Archivo> Nuevo> Destino> Paquete de prueba de unidad iOS.
Y luego agregue sus pruebas allí. Esto funcionó para mí. El problema fue que no seleccioné crear pruebas unitarias cuando creé mi proyecto. Espero que esto ayude a alguien.
Tuve el mismo problema y la solución para mí fue:
- Selecciona mi esquema
- Editar esquema ...
- Luego, cuando se abra la ventana de configuración del esquema, seleccione la pestaña izquierda llamada "Prueba" para ser redirigido aquí:
- Como puede ver, mis UITests no se agregan aquí, pero existen en mi proyecto, así que solo tuve que tocar el botón más y seleccionar mi objetivo de UITests de esta manera:
- Luego toque el botón "Agregar" y cierre la vista de configuración
- Termine con un proyecto limpio e intente nuevamente, debería funcionar
- Y no olvide verificar eso también: https://developer.apple.com/library/archive/qa/qa1954/_index.html
Espero que esta respuesta ayude.
PD: un último pensamiento en mi objetivo de prueba en la configuración de compilación tuve que verificar estas propiedades que no se configuraron correctamente:
DEBUG_INFORMATION_FORMAT = dwarf;
ONLY_ACTIVE_ARCH = YES;
VALIDATE_PRODUCT = NO;
Verifique que el archivo en cuestión no esté en el objetivo principal, sino solo en el objetivo de prueba. Solo el objetivo de prueba tendrá ese marco para importar.