objective c - valor - isKindOfClass: devuelve falso negativo en el paquete de prueba de unidad
valor predictivo negativo concepto (3)
Como mencioné en mi pregunta, me di cuenta de que estaba incluyendo incorrectamente los archivos de origen de la aplicación en la fase de compilación de los orígenes de compilación del paquete de prueba. Después de eliminar los archivos de origen de esta fase de compilación, resolví el error del vinculador de los símbolos faltantes cambiando la configuración de Construcción de Símbolos Ocultos por Predeterminado a "No" para la configuración de Depuración
Esto solucionó el error del vinculador y significaba que ya no estaba incluyendo archivos de origen duplicados
Nota: Además, asegúrese de establecer el "Destino de host" para el objetivo de prueba en la pestaña Info
de Xcode para que extraiga las fuentes de compilación desde allí
Así que tengo una instancia de MyViewController en la vista detallada de un UISplitViewController. Estoy ejecutando una prueba de unidad para ver si la vista de detalles contiene el tipo de vista correcto.
Pruebo el tipo de controlador en la prueba de unidad con lo siguiente:
[controller isKindOfClass:[MyViewController class]];
Sin embargo, el método isKindOfClass siempre devuelve NO
Cuando selecciono el objeto en el depurador, obtengo lo siguiente:
(gdb) po controller
<MyViewController: 0xb31c4d0>
También probé el método isMemberOfClass: produce los mismos resultados. ¿Alguien puede explicar por qué sucedería esto?
EDITAR: Entonces, después de leer el artículo publicado por Nick Weaver, me di cuenta de que estaba incluyendo los archivos de origen de mi aplicación en la fase de compilación de las fuentes de compilación del paquete de prueba. Esto también se indicó en el registro mediante declaraciones similares a las siguientes:
Class MyViewController is implemented in both /Users/jdoe/Library/Application Support/iPhone Simulator/4.3.2/Applications/670A077A-BAD8-4FA6-945A-851F33114CF5/MyApp.app/MyApp and /Users/jdoe/Library/Developer/Xcode/DerivedData/MyApp-drxyfejeattjwgantzesgensnlnx/Build/Products/Debug-iphonesimulator/MyAppTests.octest/MyAppTests. One of the two will be used. Which one is undefined.
Sin embargo, cuando elimino los archivos de origen de la fase de compilación de los orígenes de compilación del paquete de prueba, obtendría un error de vinculador que se parece a lo siguiente:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_MyViewController", referenced from:
objc-class-ref in _MyViewControllerTests.o
(maybe you meant: _OBJC_CLASS_$__MyViewControllerTests)
Tal vez esto sea útil, primera respuesta: isKindOfClass y NSStringFromClass no están de acuerdo sobre UIApplicationDelegate .
Tuve el mismo problema con una de mis aplicaciones, lo solucioné eliminando el archivo .m del objetivo de prueba. En su caso, eliminar MyViewController.m del objetivo de prueba solucionará su problema. Abra su archivo .m. Vaya al navegador derecho en Xcode y elimine la marca de la membresía Destino para el objetivo de prueba. El problema es que el compilador compila dos MyViewController.m (uno para la aplicación uno para la prueba) y .class puede devolver un objeto diferente.