Sobes.tech
Junior — Middle

Kun je tests uitvoeren op methoden die als privé zijn gedeclareerd binnen de klasse?

sobes.tech AI

Antwoord van AI

In iOS (Swift/Objective-C) wordt het direct testen van private methoden niet aanbevolen en is het meestal niet mogelijk vanwege toegangsbeperkingen. Private methoden zijn bedoeld voor de interne implementatie van de klasse en mogen niet rechtstreeks worden getest.

Er zijn echter verschillende benaderingen:

  1. Test de openbare methoden die private methoden gebruiken — hiermee wordt de logica van private methoden indirect gecontroleerd.
  2. In Swift kun je @testable import gebruiken en de methoden internal maken in plaats van private, zodat tests er toegang toe hebben.
  3. In Objective-C kunnen categorieën (category) in tests worden gebruikt om toegang te krijgen tot private methoden.

Voorbeeld in Swift:

// In de hoofdmodule
class MyClass {
    private func privateMethod() -> Int {
        return 42
    }
    func publicMethod() -> Int {
        return privateMethod() + 1
    }
}

// In tests
@testable import MyModule

func testPublicMethod() {
    let obj = MyClass()
    XCTAssertEqual(obj.publicMethod(), 43)
}

Het is dus beter om het gedrag van de klasse via de publieke interface te testen, in plaats van direct toegang te krijgen tot private methoden.