Ricerca…


Aggiunta di file di test a Xcode Project

Quando si crea il progetto

È necessario selezionare "Includi test unitari" nella finestra di dialogo di creazione del progetto.

inserisci la descrizione dell'immagine qui

Dopo aver creato il progetto

Se hai perso il controllo di quell'elemento durante la creazione del tuo progetto, puoi sempre aggiungere i file di test in un secondo momento. Fare così:

1- Vai alle impostazioni del progetto in Xcode

2- Vai a "Obiettivi"

3- Fai clic su "Aggiungi target"

4- In "Altro", selezionare "Pacchetto test cacao Touch Unit Test"

Alla fine, dovresti avere un file chiamato [Your app name]Tests.swift . In Objective-C, dovresti avere due file chiamati [Your app name]Tests.h e [Your app name]Tests.m .

[Your app name]Tests.swift or .m file [Your app name]Tests.swift or .m includerà per impostazione predefinita:

  • XCTest moduli XCTest
  • A [Your app name]Tests classe che estende XCTestCase
  • setUp , tearDown , testExample , testPerformanceExample

veloce

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

}

Objective-C

#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

Aggiunta di Storyboard e Visualizza controller come istanze per testare il file

Per iniziare con il test delle unità, che verrà eseguito nel file di test e testeremo il View Controller e Storyboard, dovremmo introdurre questi due file nel file di test.

Definizione del controller di visualizzazione

veloce

var viewController : ViewController!

Presentazione dello Storyboard e inizializzazione del View Controller

Aggiungi questo codice al metodo setUp() :

veloce

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

Objective-C

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

In questo modo, potresti scrivere metodi di prova e sapranno dove cercare gli errori. In questo caso, ci sono View Controller e Storyboard.

Aggiunta di metodi di prova

Secondo Apple:

Metodi di prova

Un metodo di prova è un metodo di istanza di una classe di test che inizia con il test prefisso, non accetta parametri e restituisce void, ad esempio, (void) testColorIsRed (). Un metodo di prova esercita il codice nel progetto e, se tale codice non produce il risultato previsto, segnala i guasti utilizzando un set di API di asserzione. Ad esempio, il valore di ritorno di una funzione potrebbe essere confrontato con un valore atteso o il test potrebbe affermare che l'uso improprio di un metodo in una delle classi genera un'eccezione.

Quindi aggiungiamo un metodo di test usando "test" come prefisso del metodo, come:

veloce

func testSomething() {

}

Objective-C

- (void)testSomething {

}

Per testare realmente i risultati, usiamo il metodo XCTAssert() , che prende un'espressione booleana, e se è vero, segna il test come riuscito, altrimenti lo contrassegnerà come non riuscito.

Diciamo che abbiamo un metodo nella classe View Controller chiamato sum() che calcola la somma di due numeri. Per testarlo, usiamo questo metodo:

veloce

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

Objective-C

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

Nota

Per impostazione predefinita, non è possibile accedere all'etichetta, alla casella di testo o ad altri elementi dell'interfaccia utente della classe View Controller dalla classe di test se vengono creati per la prima volta nel file Storyboard. Questo perché sono inizializzati nel metodo loadView() della classe View Controller e questo non verrà chiamato durante il test. Il modo migliore per chiamare loadView() e tutti gli altri metodi richiesti è accedere alla proprietà view della nostra proprietà viewController . È necessario aggiungere questa riga prima di testare gli elementi dell'interfaccia utente:

XCTAssertNotNil(viewController.view)

Inizia i test

Test di un metodo specifico

Per testare un metodo specifico, fare clic sul quadrato accanto alla definizione del metodo.

Testare tutti i metodi

Per testare tutti i metodi, fare clic sul quadrato accanto alla definizione della classe.

Vedi il risultato del test

Se c'è un controllo verde accanto alla definizione, il test è riuscito.

inserisci la descrizione dell'immagine qui

Se c'è una croce rossa accanto alla definizione, il test è fallito.

inserisci la descrizione dell'immagine qui

Esecuzione di tutti i test

Product -> Test OR Cmd + U

Verranno eseguiti tutti i test da tutti gli obiettivi di test!

Importa un modulo che può essere testato

Classi, strutture, enumerazioni e tutti i loro metodi sono internal per impostazione predefinita. Ciò significa che è possibile accedervi solo dallo stesso modulo. I test case sono in un target diverso e questo significa che si trovano in un modulo diverso. Per poter accedere al metodo che vuoi testare, devi importare il modulo da testare usando la parola chiave @testable .

Diciamo che abbiamo un modulo principale chiamato ToDo e vogliamo scrivere test per questo. Vorremmo importare quel modulo in questo modo:

@testable import ToDo

Tutti i metodi di test nel file con questa istruzione import ora possono accedere a tutte internal classi internal , le strutture, le enumerazioni e tutti i loro metodi internal del modulo ToDo .

Non si dovrebbero mai aggiungere i file con gli elementi che si desidera testare al target di test perché ciò può portare a errori di debug difficili.

Attivare il caricamento e l'aspetto della vista

Visualizza il caricamento

In un test per un controller di visualizzazione a volte si desidera attivare l'esecuzione di loadView() o viewDidLoad() . Questo può essere fatto accedendo alla vista. Supponiamo che tu abbia l'istanza del controller di visualizzazione nel tuo test chiamato sut (system under test), quindi il codice sarebbe simile a questo:

XCTAssertNotNil(sut.view)

Visualizza aspetto

Puoi anche attivare i metodi viewWillAppear(_:) e viewDidAppear(_:) aggiungendo il seguente codice:

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

Scrivere una lezione di prova

import XCTest
@testable import PersonApp

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

Ora discutiamo cosa sta succedendo qui. La riga import XCTest ci consentirà di estendere XCTestCase e utilizzare XCTAssertEqual (tra le altre affermazioni). L'estensione di XCTestCase e il prefisso del nostro nome test con il test garantiranno che Xcode esegua automaticamente questo test durante l'esecuzione dei test nel progetto ( ⌘U o Prodotto > Test ). La linea @testable import PersonApp importerà il nostro target PersonApp modo che possiamo testare e utilizzare classi da esso, come la Person nel nostro esempio sopra. Infine, il nostro XCTAssertEqual garantirà che person.completeName() sia uguale alla stringa "Josh Brown" .



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow