xcode ios7 xcode5 xcode5.0.1

XCode 5 Símbolo de prueba "rT" significa qué?



ios7 xcode5 (4)

Tengo 2 clases de prueba en un proyecto de XCode 5:

ABCDataModelTests. {H, m}

- (void)testAlwaysPassing { ... }

ABCDataModelListColorsTests.m que hereda de ABCDataModelTests.

- (void)testNumberOfListColorsGreaterThan7 { ... }

Cuando realicé la prueba, noté que hay un símbolo "rT" debajo de las pruebas de la subclase, como se muestra en la imagen.

¿Qué significa "rT"? Tenga en cuenta que la subclase hereda el método de prueba "testAlwaysPassing".

No puedo encontrar nada en la documentación de Apple para "Nuevas características en XCode 5 / 5.0.1" ¿Existe alguna documentación sobre el significado de todos los símbolos?


Eliminar datos derivados no me ayudó a deshacerme de ejecutar estas pruebas. Así que creé una pequeña categoría en XCTestCase y funcionó:

#import "XCTestCase+TestCaseSwizzling.h" @import ObjectiveC.runtime; static NSMutableSet* alreadyRunTests = nil; @implementation XCTestCase (TestCaseSwizzling) + (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ alreadyRunTests = [NSMutableSet set]; Class class = [self class]; SEL originalSelector = @selector(invokeTest); SEL swizzledSelector = @selector(swizzledInvokeTest); Method originalMethod = class_getInstanceMethod(class, originalSelector); Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); method_exchangeImplementations(originalMethod, swizzledMethod); }); } - (void)swizzledInvokeTest { NSString* selectorString = NSStringFromSelector(self.invocation.selector); if (![alreadyRunTests containsObject:selectorString]) { [alreadyRunTests addObject:selectorString]; [self swizzledInvokeTest]; } } @end


Encontré esta información en algunos foros:

La forma estándar de hacer las cosas en SenTestingKit / OCUnit / XCTest es declarar sus pruebas en código. Si lo hace, Xcode los descubrirá estáticamente (es decir, no en tiempo de ejecución) usando el índice. Una vez que Xcode se descubren estas pruebas, aparecen en el navegador de prueba con un ícono "t". Hasta aquí todo bien.

Ahora, los marcos SenTestingKit / OCUnit / XCTest también le permiten crear pruebas sobre la marcha en tiempo de ejecución. Algunos de nuestros usuarios hacen del usuario creativo de esta capacidad, tal vez para envolver un sistema de prueba externo o para crear pruebas para representar un conjunto dinámico de datos. Xcode no puede descubrir estas pruebas estáticamente, y solo descubre su existencia cuando regresan durante una prueba. Cuando se descubran, aparecerán en el navegador de prueba con un ícono "rT". "rT" es la abreviatura de "pruebas descubiertas en tiempo de ejecución".

Finalmente. Si hay algo incorrecto / inusual en su proyecto que impida que la indexación complete o analice correctamente sus clases de prueba, entonces sus pruebas no se descubrirán estáticamente. Aún puede construirlos y ejecutarlos con éxito, en cuyo caso Xcode acabaría tratándolos como pruebas descubiertas en tiempo de ejecución, y les dará el ícono "rT".


Estoy de acuerdo con lo que @everyday_productive dijo

"rT" por lo general significa algo incorrecto con la indexación, para solucionar esto diríjase a la terminal y escriba lo siguiente:

$ cd ~/Library/Developer/Xcode/

Asegúrese de que su Xcode finalice y luego elimine la carpeta "Datos derivados".


Interesante. Me ha molestado mucho el mismo problema con una clase de prueba que he creado al duplicar otro archivo en el IDE. He duplicado otros archivos de prueba antes, así que no parece ser el problema.

La clase de prueba solo tiene una prueba en su interior y otro efecto secundario del ícono violeta y su clasificación como prueba de tiempo de ejecución es que no puede activar la prueba con el pequeño ícono de triángulo ofrecido en el corredor de prueba para las otras pruebas o clases de prueba.

El menú contextual en el explorador de prueba ofrece Test "testBlah" que parece ejercer la prueba.

Salir de XCode, eliminar la carpeta xcuserdata y reconstruir hizo que la prueba se reconociera nuevamente como una prueba normal.

Recibo recordatorios de versiones anteriores de Visual Studio que solían tener problemas de almacenamiento en caché y necesitaban una eliminación regular de sus datos de contexto locales.