Suche…


Testdateien zu Xcode Project hinzufügen

Beim Erstellen des Projekts

Sie sollten im Projekterstellungsdialog "Komponententests einbeziehen" aktivieren.

Geben Sie hier die Bildbeschreibung ein

Nachdem Sie das Projekt erstellt haben

Wenn Sie dieses Element beim Erstellen des Projekts nicht überprüft haben, können Sie später jederzeit Testdateien hinzufügen. Um dies zu tun:

1- Gehen Sie in Xcode zu Ihren Projekteinstellungen

2- Gehe zu "Ziele"

3- Klicken Sie auf "Ziel hinzufügen".

4- Wählen Sie unter "Andere" die Option "Testpaket für Kakao-Touch-Einheiten testen" aus.

Am Ende sollte eine Datei mit dem Namen [Your app name]Tests.swift . In Objective-C sollten Sie stattdessen zwei Dateien namens [Your app name]Tests.h und [Your app name]Tests.m .

[Your app name]Tests.swift or .m Datei enthält standardmäßig [Your app name]Tests.swift or .m :

  • Ein XCTest
  • A [Your app name]Tests XCTestCase Klasse zur XCTestCase
  • setUp , tearDown , testExample , testPerformanceExample Methoden

Schnell

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

}

Ziel 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

Storyboard und View Controller als Instanzen zur Testdatei hinzufügen

Um mit dem Komponententest zu beginnen, der in der Testdatei ausgeführt wird, werden View Controller und Storyboard getestet. Wir sollten diese beiden Dateien in die Testdatei einfügen.

Definieren des View Controllers

Schnell

var viewController : ViewController!

Vorstellung des Storyboards und Initialisieren des View Controllers

Fügen Sie der setUp() -Methode diesen Code setUp() :

Schnell

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

Ziel c

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

Auf diese Weise könnten Sie Testmethoden schreiben, und sie wissen, wo sie nach Fehlern suchen sollen. In diesem Fall gibt es View Controller und das Storyboard.

Testmethoden hinzufügen

Laut Apple:

Testmethoden

Eine Testmethode ist eine Instanzmethode einer Testklasse, die mit dem Präfix test beginnt, keine Parameter übernimmt und void zurückgibt, z. B. (void) testColorIsRed (). Eine Testmethode übt Code in Ihrem Projekt aus. Wenn dieser Code nicht das erwartete Ergebnis liefert, werden Fehler unter Verwendung einer Reihe von Assertions-APIs gemeldet. Beispielsweise kann der Rückgabewert einer Funktion mit einem erwarteten Wert verglichen werden, oder Ihr Test kann die Annahme ausdrücken, dass eine unzulässige Verwendung einer Methode in einer Ihrer Klassen eine Ausnahme auslöst.

Also fügen wir eine Testmethode hinzu, die "test" als Präfix der Methode verwendet, wie zum Beispiel:

Schnell

func testSomething() {

}

Ziel c

- (void)testSomething {

}

Um die Ergebnisse tatsächlich zu testen, verwenden wir die XCTAssert() Methode, die einen booleschen Ausdruck XCTAssert() true ist, wird der Test als erfolgreich markiert, andernfalls wird er als fehlgeschlagen markiert.

Nehmen wir an, wir haben in View Controller eine Methode namens sum() die die Summe zweier Zahlen berechnet. Um es zu testen, verwenden wir diese Methode:

Schnell

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

Ziel c

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

Hinweis

Standardmäßig können Sie nicht auf Beschriftungen, Textfelder oder andere UI-Elemente der View Controller-Klasse über die Testklasse zugreifen, wenn sie zuerst in der Storyboard-Datei erstellt wurden. Dies liegt daran, dass sie in der loadView() -Methode der View Controller-Klasse initialisiert werden und beim Testen nicht aufgerufen werden. Die beste Möglichkeit, loadView() und alle anderen erforderlichen Methoden loadView() , ist der Zugriff auf die view viewController unserer viewController . Sie sollten diese Zeile hinzufügen, bevor Sie Elemente der Benutzeroberfläche testen:

XCTAssertNotNil(viewController.view)

Starten Sie den Test

Testen einer bestimmten Methode

Klicken Sie zum Testen einer bestimmten Methode auf das Quadrat neben der Methodendefinition.

Alle Methoden testen

Um alle Methoden zu testen, klicken Sie auf das Quadrat neben der Klassendefinition.

Sehen Sie das Testergebnis

Wenn neben der Definition ein grünes Häkchen angezeigt wird, ist der Test erfolgreich abgeschlossen.

Geben Sie hier die Bildbeschreibung ein

Wenn sich neben der Definition ein rotes Kreuz befindet, ist der Test fehlgeschlagen.

Geben Sie hier die Bildbeschreibung ein

Alle Tests werden ausgeführt

Product -> Test OR Cmd + U

Es werden alle Tests von allen Testzielen ausgeführt!

Importieren Sie ein Modul, das getestet werden kann

Klassen, Strukturen, Aufzählungen und alle ihre Methoden sind standardmäßig internal . Dies bedeutet, dass nur von demselben Modul aus auf sie zugegriffen werden kann. Die Testfälle befinden sich in einem anderen Ziel, dh sie befinden sich in einem anderen Modul. Um auf die zu testende Methode zugreifen zu können, müssen Sie das zu testende Modul mit dem Schlüsselwort @testable .

Nehmen wir an, wir haben ein Hauptmodul namens ToDo und wollen Tests dafür schreiben. Wir würden dieses Modul so importieren:

@testable import ToDo

Alle Testmethoden in der Datei mit dieser Importanweisung können jetzt auf alle internal Klassen, Strukturen, Enums und alle ihre internal Methoden des ToDo Moduls ToDo .

Sie sollten niemals die Dateien mit den Elementen, die Sie testen möchten, zum Testziel hinzufügen, da dies zu schwer zu debuggenden Fehlern führen kann.

Triggeransicht laden und Aussehen

Laden anzeigen

In einem Test für einen View-Controller möchten Sie manchmal die Ausführung von loadView() oder viewDidLoad() auslösen. Dies kann durch Zugriff auf die Ansicht erfolgen. Nehmen wir an, Sie haben in Ihrem Test eine View-Controller-Instanz namens sut (System unter Test). Dann würde der Code folgendermaßen aussehen:

XCTAssertNotNil(sut.view)

Aussehen anzeigen

Sie können die Methoden viewWillAppear(_:) und viewDidAppear(_:) auch auslösen, indem Sie folgenden Code hinzufügen:

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

Testklasse schreiben

import XCTest
@testable import PersonApp

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

Lass uns jetzt besprechen, was hier los ist. Die import XCTest Zeile ermöglicht uns die Erweiterung von XCTestCase und die Verwendung von XCTAssertEqual (neben anderen Assertions). Wenn Sie XCTestCase und unseren XCTestCase mit test XCTestCase wird sichergestellt, dass Xcode diesen Test automatisch ausführt, wenn Sie die Tests im Projekt ausführen ( U oder Product > Test ). Die @testable import PersonApp Zeile importiert unser PersonApp Ziel, damit wir Klassen testen und verwenden können, wie zum Beispiel die Person in unserem obigen Beispiel. Und schließlich stellt unser XCTAssertEqual sicher, dass person.completeName() der Zeichenfolge "Josh Brown" .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow