Sobes.tech
Junior — Middle

El lehet végezni a privátként deklarált módszerek tesztelését az osztályon belül?

sobes.tech MI

Válasz az MI-től

iOS (Swift/Objective-C) környezetben nem javasolt és általában nem is lehetséges közvetlenül tesztelni a privát metódusokat az elérhetőségi korlátozások miatt. A privát metódusokat a osztály belső megvalósítására szánták, és nem szabad közvetlenül tesztelni őket.

Azonban több megközelítés is létezik:

  1. Tesztelje azokat a nyilvános metódusokat, amelyek privát metódusokat használnak — így közvetve ellenőrizve a privát metódusok logikáját.
  2. Swift-ben használhatja az @testable import-ot, és a metódusokat internal-ként állíthatja be a private helyett, így a tesztek hozzáférhetnek hozzájuk.
  3. Objective-C-ben a tesztekben kategóriákat (category) használhat a privát metódusok eléréséhez.

Swift példával:

// A fő modulban
class MyClass {
    private func privateMethod() -> Int {
        return 42
    }
    func publicMethod() -> Int {
        return privateMethod() + 1
    }
}

// Tesztekben
@testable import MyModule

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

Ezért jobb a osztály viselkedését a nyilvános interfészén keresztül tesztelni, mint közvetlenül a privát metódusokat elérni.