Buscar..


Agregando archivos de prueba a Xcode Project

Al crear el proyecto.

Debe marcar "Incluir pruebas unitarias" en el cuadro de diálogo de creación de proyecto.

introduzca la descripción de la imagen aquí

Después de crear el proyecto.

Si no revisó ese elemento mientras creaba su proyecto, siempre podría agregar archivos de prueba más tarde. Para hacerlo:

1- Ve a la configuración de tu proyecto en Xcode

2- Ir a "Objetivos"

3- Haga clic en "Agregar objetivo"

4- En "Otro", seleccione "Paquete de prueba de prueba de unidad de cacao táctil"

Al final, debe tener un archivo llamado [Your app name]Tests.swift . En Objective-C, debe tener dos archivos llamados [Your app name]Tests.h [Your app name]Tests.m en [Your app name]Tests.m lugar.

[Your app name]Tests.swift or .m archivo [Your app name]Tests.swift or .m incluirá de forma predeterminada:

  • Una importación del módulo XCTest
  • Una clase de [Your app name]Tests que amplía XCTestCase
  • setUp , tearDown , testExample , testPerformanceExample

Rápido

import XCTest

class MyProjectTests: XCTestCase {

override func setUp() {
    super.setUp()
    // Put setup code here. This method is called before the invocation of each test method in the class.
}

override func tearDown() {
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    super.tearDown()
}

func testExample() {
    // This is an example of a functional test case.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
    
}

func testPerformanceExample() {
    // This is an example of a performance test case.
    self.measure {
        // Put the code you want to measure the time of here.
    }
}

}

C objetivo

#import <XCTest/XCTest.h>

@interface MyProjectTests : XCTestCase

@end

@implementation MyProjectTests

- (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.
}

- (void)testPerformanceExample {
// This is an example of a performance test case.
    [self measureBlock:^{
    // Put the code you want to measure the time of here.
    }];
}

@end

Agregando Storyboard y View Controller como instancias al archivo de prueba

Para comenzar con las pruebas unitarias, que se realizarán en el archivo de pruebas y se probarán el Controlador de vista y el Guión gráfico, debemos introducir estos dos archivos en el archivo de prueba.

Definiendo el controlador de vista

Rápido

var viewController : ViewController!

Presentando el Storyboard e inicializando el controlador de vista

Agregue este código al método setUp() :

Rápido

let storyboard = UIStoryboard(name: "Main", bundle: nil)
viewController = storyboard.instantiateInitialViewController() as! ViewController

C objetivo

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:"Main" bundle:nil];
viewController = (ViewController *) [storyboard instantiateInitialViewController];

De esta manera, podría escribir métodos de prueba, y ellos sabrán dónde verificar errores. En este caso, hay View Controller y el Storyboard.

Añadiendo métodos de prueba.

Según Apple:

Métodos de prueba

Un método de prueba es un método de instancia de una clase de prueba que comienza con la prueba de prefijo, no toma parámetros y devuelve vacío, por ejemplo, (void) testColorIsRed (). Un método de prueba ejerce código en su proyecto y, si ese código no produce el resultado esperado, informa fallas usando un conjunto de API de aserción. Por ejemplo, el valor de retorno de una función podría compararse con un valor esperado o su prueba podría afirmar que el uso incorrecto de un método en una de sus clases produce una excepción.

Así que agregamos un método de prueba usando "prueba" como el prefijo del método, como:

Rápido

func testSomething() {

}

C objetivo

- (void)testSomething {

}

Para probar realmente los resultados, usamos el método XCTAssert() , que toma una expresión booleana, y si es verdadero, marca la prueba como exitosa, de lo contrario, la marcará como fallida.

Digamos que tenemos un método en la clase View Controller llamado sum() que calcula la suma de dos números. Para probarlo, utilizamos este método:

Rápido

func testSum(){
    let result = viewController.sum(4, and: 5)
    XCTAssertEqual(result, 9)
}

C objetivo

- (void)testSum {
    int result = [viewController sum:4 and:5];
    XCTAssertEqual(result, 9);
}

Nota

De forma predeterminada, no puede acceder a la etiqueta, el cuadro de texto u otros elementos de la interfaz de usuario de la clase View Controller desde la clase de prueba si se crean por primera vez en un archivo de Storyboard. Esto se debe a que se inicializan en el método loadView() de la clase View Controller, y no se llamará al realizar la prueba. La mejor manera de llamar a loadView() y todos los demás métodos requeridos es acceder a la propiedad de view de nuestra propiedad viewController . Debe agregar esta línea antes de probar los elementos de la interfaz de usuario:

XCTAssertNotNil(viewController.view)

Empezar a probar

Probando un método específico

Para probar un método específico, haga clic en el cuadrado junto a la definición del método.

Probando todos los métodos

Para probar todos los métodos, haga clic en el cuadrado junto a la definición de clase.

Ver el resultado de la prueba.

Si hay una marca verde al lado de la definición, la prueba ha tenido éxito.

introduzca la descripción de la imagen aquí

Si hay una cruz roja junto a la definición, la prueba ha fallado.

introduzca la descripción de la imagen aquí

Ejecutando todas las pruebas

Product -> Test OR Cmd + U

¡Se ejecutarán todas las pruebas de todos los objetivos de prueba!

Importar un módulo que pueda ser probado.

Las clases, estructuras, enumeraciones y todos sus métodos son internal por defecto. Esto significa que solo se puede acceder desde el mismo módulo. Los casos de prueba están en un objetivo diferente y esto significa que están en un módulo diferente. Para poder acceder al método que desea probar, necesita importar el módulo a probar usando la palabra clave @testable .

Digamos que tenemos un módulo principal llamado ToDo y queremos escribir pruebas para él. Importaríamos ese módulo así:

@testable import ToDo

Todos los métodos de prueba en el archivo con esta declaración de importación ahora pueden acceder a todas internal clases internal , estructuras, enumeraciones y todos sus métodos internal del módulo de ToDo .

Nunca debe agregar los archivos con los elementos que desea probar al objetivo de la prueba, ya que esto puede llevar a errores difíciles de depurar.

Vista de gatillo de carga y apariencia.

Ver cargando

En una prueba para un controlador de vista, a veces desea activar la ejecución de loadView() o viewDidLoad() . Esto se puede hacer accediendo a la vista. Digamos que tiene una instancia de controlador de vista en su prueba llamada sut (sistema bajo prueba), entonces el código se vería así:

XCTAssertNotNil(sut.view)

Ver apariencia

También puede activar los métodos viewWillAppear(_:) y viewDidAppear(_:) agregando el siguiente código:

sut.beginAppearanceTransition(true, animated: true)
sut.endAppearanceTransition()

Escribiendo una clase de prueba

import XCTest
@testable import PersonApp

class PersonTests: XCTestCase {
    func test_completeName() {
        let person = Person(firstName: "Josh", lastName: "Brown")
        XCTAssertEqual(person.completeName(), "Josh Brown")
    }
}

Ahora vamos a discutir lo que está pasando aquí. La línea de import XCTest nos permitirá extender XCTestCase y usar XCTAssertEqual (entre otras afirmaciones). Extender XCTestCase y prefijar nuestro nombre de test con test garantizará que Xcode ejecute automáticamente esta prueba cuando ejecute las pruebas en el proyecto ( ⌘U o Producto > Prueba ). La línea @testable import PersonApp importará nuestro destino de PersonApp para que podamos probar y usar clases desde él, como la Person en nuestro ejemplo anterior. Y finalmente, nuestro XCTAssertEqual se asegurará de que person.completeName() sea ​​igual a la cadena "Josh Brown" .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow