verdaderos valor uso test tasa tamizaje sensibilidad pruebas predictivo positivos positivo parametros negativos negativo laboratorio falsos falso estudio estadistica especificidad diagnosticas concepto objective-c cocoa unit-testing xcode4

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)



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.