Sobes.tech
Junior — Middle

É possível realizar testes em métodos declarados como privados dentro da classe?

sobes.tech IA

Resposta da IA

No iOS (Swift/Objective-C), não é recomendado nem geralmente possível testar diretamente métodos privados devido às restrições de acesso. Os métodos privados destinam-se à implementação interna da classe e não devem ser testados diretamente.

No entanto, existem várias abordagens:

  1. Testar métodos públicos que usam métodos privados — assim verifica-se indiretamente a lógica dos métodos privados.
  2. Em Swift, pode-se usar @testable import e tornar os métodos internal em vez de private, para que os testes possam acessá-los.
  3. Em Objective-C, pode-se usar categorias (category) nos testes para aceder aos métodos privados.

Exemplo em Swift:

// No módulo principal
class MyClass {
    private func privateMethod() -> Int {
        return 42
    }
    func publicMethod() -> Int {
        return privateMethod() + 1
    }
}

// Nos testes
@testable import MyModule

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

Assim, é melhor testar o comportamento da classe através da interface pública, em vez de aceder diretamente aos métodos privados.