Zoeken…


Testbestanden toevoegen aan Xcode Project

Bij het maken van het project

U moet "Inclusief eenheidstests" aanvinken in het dialoogvenster voor het maken van projecten.

voer hier de afbeeldingsbeschrijving in

Na het maken van het project

Als u het item tijdens het maken van uw project niet hebt gecontroleerd, kunt u later altijd testbestanden toevoegen. Om dit te doen:

1- Ga naar je projectinstellingen in Xcode

2- Ga naar "Targets"

3- Klik op "Doel toevoegen"

4- Selecteer onder "Overige" de optie "Testingbundel Cocoa Touch Unit"

Aan het einde moet u een bestand hebben met de naam [Your app name]Tests.swift . In Objective-C zou u in plaats daarvan twee bestanden met de naam [Your app name]Tests.h en [Your app name]Tests.m .

[Your app name]Tests.swift or .m bestand [Your app name]Tests.swift or .m bevat standaard:

  • Een XCTest module-import
  • Een [Your app name]Tests klasse die XCTestCase
  • setUp , tearDown , testExample , testPerformanceExample methoden

Snel

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

}

Doelstelling 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 en View Controller toevoegen als exemplaren om bestand te testen

Om aan de slag te gaan met het testen van eenheden, wat in het testbestand wordt gedaan en de View Controller en Storyboard wordt getest, moeten we deze twee bestanden in het testbestand introduceren.

De View Controller definiëren

Snel

var viewController : ViewController!

Introductie van het Storyboard en het initialiseren van de View Controller

Voeg deze code toe aan de methode setUp() :

Snel

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

Doelstelling C

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

Op deze manier kun je testmethoden schrijven en weten ze waar ze moeten controleren op fouten. In dit geval zijn er View Controller en het Storyboard.

Testmethoden toevoegen

Volgens Apple:

Testmethoden

Een testmethode is een instantiemethode van een testklasse die begint met de prefix-test, geen parameters gebruikt en ongeldig retourneert, bijvoorbeeld (void) testColorIsRed (). Een testmethode oefent code in uw project uit en, als die code niet het verwachte resultaat oplevert, rapporteert het fouten met behulp van een set assertion-API's. De retourwaarde van een functie kan bijvoorbeeld worden vergeleken met een verwachte waarde of uw test kan beweren dat onjuist gebruik van een methode in een van uw klassen een uitzondering oplevert.

Dus voegen we een testmethode toe met "test" als het voorvoegsel van de methode, zoals:

Snel

func testSomething() {

}

Doelstelling C

- (void)testSomething {

}

Om de resultaten daadwerkelijk te testen, gebruiken we de XCTAssert() -methode, die een booleaanse uitdrukking gebruikt en, als deze waar is, de test als geslaagd markeert, anders wordt deze als mislukt gemarkeerd.

Laten we zeggen dat we een methode hebben in de View Controller-klasse genaamd sum() die de som van twee getallen berekent. Om het te testen, gebruiken we deze methode:

Snel

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

Doelstelling C

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

Notitie

Standaard hebt u vanuit de testklasse geen toegang tot labels, tekstvakken of andere UI-items van de View Controller-klasse als ze eerst in Storyboard-bestand worden gemaakt. Dit komt omdat ze worden geïnitialiseerd in de methode loadView() van de klasse View Controller en dit wordt niet aangeroepen tijdens het testen. De beste manier om loadView() en alle andere vereiste methoden aan te roepen, is toegang te krijgen tot de eigenschap view van onze viewController eigenschap. U moet deze regel toevoegen voordat u UI-elementen test:

XCTAssertNotNil(viewController.view)

Begin met testen

Een specifieke methode testen

Om een specifieke methode te testen, klikt u op het vierkant naast de methodedefinitie.

Alle methoden testen

Klik op het vierkant naast de klassedefinitie om alle methoden te testen.

Bekijk het testresultaat

Als er een groen vinkje naast de definitie staat, is de test geslaagd.

voer hier de afbeeldingsbeschrijving in

Als er een rood kruis naast de definitie staat, is de test mislukt.

voer hier de afbeeldingsbeschrijving in

Alle tests uitvoeren

Product -> Test OR Cmd + U

Alle tests van alle testdoelen worden uitgevoerd!

Importeer een module die kan worden getest

Klassen, structs, enums en al hun methoden zijn standaard internal . Dit betekent dat ze alleen toegankelijk zijn vanuit dezelfde module. De testgevallen bevinden zich in een ander doel en dit betekent dat ze zich in een andere module bevinden. Om toegang te krijgen tot de methode die u wilt testen, moet u de te testen module importeren met behulp van het trefwoord @testable .

Laten we zeggen dat we een hoofdmodule hebben die ToDo heet en dat we er tests voor willen schrijven. We zouden die module als volgt importeren:

@testable import ToDo

Alle testmethoden in het bestand met deze importverklaring hebben nu toegang tot alle internal klassen, structs, enums en al hun internal methoden van de ToDo module.

Voeg nooit de bestanden met de elementen die u wilt testen toe aan het testdoel, omdat dat kan leiden tot moeilijk te debuggen fouten.

Trigger weergave laden en uiterlijk

Bekijk laden

In een test voor een loadView() wilt u soms de uitvoering van loadView() of viewDidLoad() activeren. Dit kan worden gedaan door toegang te krijgen tot de weergave. Laten we zeggen dat u in uw test een instantie van de controller hebt genaamd sut (systeem wordt getest), dan ziet de code er als volgt uit:

XCTAssertNotNil(sut.view)

Bekijk uiterlijk

U kunt ook de methoden viewWillAppear(_:) en viewDidAppear(_:) door de volgende code toe te voegen:

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

Een testles schrijven

import XCTest
@testable import PersonApp

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

Laten we nu bespreken wat hier aan de hand is. De import XCTest lijn zal ons toelaten om uit te breiden XCTestCase en gebruik XCTAssertEqual (onder andere beweringen). XCTestCase uitbreiden en onze XCTestCase voorafgaan door test zorgt ervoor dat Xcode deze test automatisch uitvoert bij het uitvoeren van de tests in het project ( ⌘U of Product > Test ). De @testable import PersonApp regel importeert ons PersonApp doel zodat we klassen kunnen testen en gebruiken, zoals de Person in ons voorbeeld hierboven. En ten slotte XCTAssertEqual onze XCTAssertEqual ervoor dat person.completeName() gelijk is aan de tekenreeks "Josh Brown" .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow