Sobes.tech
Junior — Middle

Lze provést testování metod deklarovaných jako soukromé uvnitř třídy?

sobes.tech AI

Odpověď od AI

V iOS (Swift/Objective-C) se nedoporučuje a obvykle není možné přímo testovat soukromé metody kvůli omezením přístupu. Soukromé metody jsou určeny pro interní implementaci třídy a neměly by být testovány přímo.

Existuje však několik přístupů:

  1. Testovat veřejné metody, které používají soukromé — tímto způsobem se nepřímo ověřuje logika soukromých metod.
  2. V Swift lze použít @testable import a změnit metody na internal místo private, aby k nim testy měly přístup.
  3. V Objective-C lze v testech použít kategorie (category) k získání přístupu k soukromým metodám.

Příklad v Swift:

// V hlavním modulu
class MyClass {
    private func privateMethod() -> Int {
        return 42
    }
    func publicMethod() -> Int {
        return privateMethod() + 1
    }
}

// V testech
@testable import MyModule

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

Je lepší testovat chování třídy přes veřejné rozhraní, než přímo přistupovat k soukromým metodám.