Sobes.tech
Junior — Middle

Kas on võimalik teha testid meetoditele, mis on klassi sees privaatseks deklareeritud?

sobes.tech AI

Vastus AI-lt

iOS (Swift/Objective-C) keskkonnas ei ole soovitatav ja tavaliselt ei ole võimalik otse testida privaatseid meetodeid juurdepääsupiirangute tõttu. Privaatseid meetodeid on mõeldud klassi sisekasutuseks ning neid ei tohiks otse testida.

Siiski on olemas mõned lähenemisviisid:

  1. Testida avalikke meetodeid, mis kasutavad privaatseid — sel viisil kontrollitakse kaudselt privaatsete meetodite loogikat.
  2. Swiftis saab kasutada @testable import ja muuta meetodid internal asemel private, et testid saaksid neile ligi.
  3. Objective-C-s saab testides kasutada kategooriaid (category), et pääseda ligi privaatsetele meetoditele.

Näide Swiftis:

// Peamises modul
class MyClass {
    private func privateMethod() -> Int {
        return 42
    }
    func publicMethod() -> Int {
        return privateMethod() + 1
    }
}

// Testides
@testable import MyModule

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

Seega on parem testida klassi käitumist läbi avaliku liidese, mitte otse ligi pääseda privaatsetele meetoditele.