unit testing - test - Las pruebas Xcode 7 no se ejecutan, pero informa el éxito
unit test swift (9)
Intento agregar un objetivo de prueba a mi proyecto, sin embargo, cuando ejecuto las pruebas parece que las pruebas reales no se están ejecutando, en cambio Xcode informa de éxito siempre, pero el pequeño cuadrado que indica si la prueba pasó o no permanece claro.
Solo tengo un objetivo de prueba y una clase:
@implementation Tests
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
XCTAssert(false, "");
}
- (void)testPerformanceExample {
XCTAssert(false, "");
}
@end
La prueba debería fallar pero muestra un mensaje emergente que dice éxito. Además, el informe de la prueba dice que no hay pruebas.
Si trato de ejecutar las pruebas individualmente, las pruebas "tienen éxito" pero no obtengo información sobre el informe y el cuadrado permanece vacío.
¿Alguna idea de cómo arreglarlo?
Antigua pregunta pero las cosas que lo resolvieron en mi caso se mencionaron aquí todavía:
No puede (¿siempre?) Cambiar el nombre de las clases / casos de prueba. Crea una nueva clase / caso y tira la vieja.
Apague el dispositivo iOS y vuelva a encenderlo. También es posible que desee extraer el cable USB y volver a conectarlo para que Xcode pueda restablecer las comunicaciones con el dispositivo. Cuando esto me sucediera, la prueba informaría que la prueba se realizó de manera inmediata sin que se ejecutara la prueba. También noté que cuando intentaba grabar una nueva acción de prueba de UI, Xcode se bloqueaba cada vez, de forma similar a como se comportaba antes de habilitar por primera vez la configuración de iOS - Desarrollador - Habilitar la configuración de automatización de la interfaz de usuario y recordé que era necesario reiniciar un dispositivo iOS cuando esto estaba habilitado, intenté reiniciar el dispositivo iOS y Xcode comenzó a comportarse de nuevo donde podía grabar y ejecutar pruebas con éxito en mis dispositivos iOS. Divulgación completa: también activé y desactivé la Habilitar la automatización de la interfaz de usuario antes de reiniciar mi dispositivo iOS, pero dudo que fuera necesario. -rr
Compruebe la consola (Comando-Shift-Y).
En mi caso, se imprimió una salida que indicaba por qué no se estaban ejecutando las pruebas. (La comprobación previa al vuelo para los marcos dinámicos estaba fallando). Pero no lo vi porque el área de depuración se había colapsado.
También en mi caso, el problema se solucionó agregando $(PROJECT_DIR)/Carthage/Build/iOS
a mis rutas de búsqueda de tiempo de ejecución como se describe here
FWIW También tuve un problema muy similar cuando uso KIF''s beforeAll
. A veces, el código colocado beforeAll
no todo funcionaba, y la prueba volvería a ser exitosa.
También a veces hace que Xcode se cuelgue. Ver la página de Github de KIF here . Aunque algunos han señalado que el problema puede no ser debido a KIF y más bien debido a XCTest sí mismo
La solución temporal fue evitar el uso de beforeAll
y, en cambio, el uso de beforeEach
Para cualquier persona que enfrente este problema, asegúrese de que su clase de prueba esté heredando de XCTestCase en lugar de XCTest. Me estaba volviendo loco probando todas estas soluciones hasta que me di cuenta de que estaba heredando de la clase equivocada. Xcode no se queja, simplemente dirá que las pruebas tuvieron éxito sin ejecutarlas. Espero que esto ayude a alguien.
Si está compilando para iOS, ¿tiene Xcode configurado para ejecutarse en un dispositivo físico? Si es así, intente configurarlo para que se ejecute en el simulador de iOS.
Descubrí que si tiene Xcode 7 configurado en una unidad de dispositivo físico, las pruebas se comportarán exactamente como lo ha descrito. La configuración de Xcode para que se ejecute temporalmente en el simulador de iOS para la prueba de la unidad solucionó el problema y ahora funciona como un encanto.
Espero que esto ayude a cualquiera que se encuentre con el mismo problema. :RE
Si esto es para las pruebas de automatización de UI, puede deberse a que no está inicializando la aplicación y lanzándola.
XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
Tuve el mismo problema y limpiar la carpeta de compilación lo resolvería. Sin embargo, hay una manera aún más rápida de hacer Product -> Perform Action -> Test Without Building
Vale la pena mencionar a cualquiera que se haya quedado estancado en esto en el futuro: Xcode solo ejecuta las funciones XCTestCase que comienzan con "prueba". Esto es contrario a otras plataformas, y me confundió cuando comencé a probar en iOS.
En la siguiente clase:
class MyBigTest: XCTestCase {
func testSensibleInputReturnSensibleAnswer() {
XCTAssert(/* stuff */)
}
func someOtherTest() {
XCTAssert(/* some other stuff */)
}
}
Solo se ejecutará testSensibleInputReturnSensibleAnswer()
.