Sök…


Lägga till testfiler till Xcode Project

När du skapar projektet

Du bör markera "Inkludera enhetstester" i dialogrutan om projektbild.

ange bildbeskrivning här

Efter att ha skapat projektet

Om du missade att kontrollera det objektet när du skapade ditt projekt, kan du alltid lägga till testfiler senare. Att göra så:

1- Gå till dina projektinställningar i Xcode

2- Gå till "Mål"

3- Klicka på "Lägg till mål"

4- Välj "Cocoa Touch Unit Test Testing Bundle" under "Other"

I slutet bör du ha en fil med namnet [Your app name]Tests.swift . I Objekt-C bör du ha två filer med namnet [Your app name]Tests.h and [Your app name]Tests.m istället.

[Your app name]Tests.swift or .m fil kommer som standard att inkludera:

  • En XCTest
  • A [Your app name]Tests klass som utvidgar XCTestCase
  • setUp , tearDown , testExample , testPerformanceExample metoder

Snabb

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

Lägga till Storyboard och View Controller som instanser för att testa filen

För att komma igång med enhetstestning, som kommer att göras i testfilen och testar View Controller och Storyboard, bör vi introducera dessa två filer i testfilen.

Definiera View Controller

Snabb

var viewController : ViewController!

Introduktion av storyboard och initialisering av View Controller

Lägg till den här koden till setUp() :

Snabb

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];

På det här sättet kan du skriva testmetoder och de vet var de ska kontrollera om det finns fel. I det här fallet finns det View Controller och Storyboard.

Lägga till testmetoder

Enligt Apple:

Testmetoder

En testmetod är en instansmetod i en testklass som börjar med prefixtestet, inte tar några parametrar och returnerar tomrum, till exempel (void) testColorIsRed (). En testmetod utövar kod i ditt projekt och om den koden inte ger det förväntade resultatet rapporterar du fel med hjälp av en uppsättning API: er. Till exempel kan en funktions returvärde jämföras med ett förväntat värde eller ditt test kan hävda att felaktig användning av en metod i en av dina klasser kastar ett undantag.

Så vi lägger till en testmetod med "test" som metodens prefix, som:

Snabb

func testSomething() {

}

Objective-C

- (void)testSomething {

}

För att testa resultaten faktiskt använder vi XCTAssert() -metoden, som tar ett booleskt uttryck, och om det är sant, markerar testet som lyckat, annars markerar det det som misslyckat.

Låt oss säga att vi har en metod i View Controller-klassen som kallas sum() som beräknar summan av två siffror. För att testa det använder vi den här metoden:

Snabb

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);
}

Notera

Som standard kan du inte få åtkomst till etikett, textruta eller andra UI-objekt i klassen View Controller från testklassen om de först skapas i Storyboard-filen. Detta beror på att de initieras i loadView() i klassen View Controller, och detta kommer inte att kallas vid testning. Det bästa sättet att ringa loadView() och alla andra nödvändiga metoder är att få tillgång till view egenskapen för vår viewController egenskap. Du bör lägga till den här raden innan du testar UI-element:

XCTAssertNotNil(viewController.view)

Börja testa

Testa en specifik metod

För att testa en specifik metod klickar du på rutan bredvid metoddefinitionen.

Testa alla metoder

För att testa alla metoder klickar du på rutan bredvid klassdefinitionen.

Se testresultatet

Om det finns en grön kontroll bredvid definitionen har testet lyckats.

ange bildbeskrivning här

Om det finns ett rött kors bredvid definitionen har testet misslyckats.

ange bildbeskrivning här

Kör alla tester

Product -> Test OR Cmd + U

Den kommer att köra alla tester från alla testmål!

Importera en modul som den kan testas

Klasser, strukturer, enums och alla deras metoder är som standard internal . Det betyder att de bara kan nås från samma modul. Testfallen ligger i ett annat mål och det betyder att de befinner sig i en annan modul. För att kunna komma åt den metod du vill testa måste du importera modulen som ska testas med @testable nyckelordet.

Låt oss säga att vi har en huvudmodul som heter ToDo och vi vill skriva tester för den. Vi skulle importera den modulen så här:

@testable import ToDo

Alla testmetoder i filen med det här importmeddelandet kan nu komma åt alla internal klasser, strukturer, enum och alla deras internal metoder i ToDo modulen.

Du bör aldrig lägga till filerna med elementen du vill testa till testmålet eftersom det kan leda till svåra felsökningsfel.

Triggervy laddning och utseende

Visa laddning

I ett test för en visningskontroller vill du ibland trigga körningen av loadView() eller viewDidLoad() . Detta kan göras genom att öppna vyn. Låt oss säga att du har inställning av kontrollenhet i ditt test som heter sut (system under test), då koden ser ut så här:

XCTAssertNotNil(sut.view)

Visa utseende

Du kan också utlösa metoderna viewWillAppear(_:) och viewDidAppear(_:) genom att lägga till följande kod:

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

Att skriva en testklass

import XCTest
@testable import PersonApp

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

Låt oss nu diskutera vad som händer här. import XCTest linjen tillåter oss att utöka XCTestCase och använda XCTAssertEqual (bland andra påståenden). Att utöka XCTestCase och prefixa vårt XCTestCase med test kommer att säkerställa att Xcode automatiskt kör detta test när testerna i projektet körs ( ⌘U eller produkt > Test ). @testable import PersonApp raden kommer att importera vårt PersonApp mål så att vi kan testa och använda klasser från det, till exempel Person i vårt exempel ovan. Och slutligen kommer vår XCTAssertEqual att säkerställa att person.completeName() är lika med strängen "Josh Brown" .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow