SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
24.11.2024

Lição: 121: Testando Views SwiftUI

Nesta aula, vamos explorar como testar efetivamente views SwiftUI. O SwiftUI revoluciona a maneira como construímos interfaces de usuário para plataformas Apple com uma sintaxe declarativa. No entanto, testar essas views requer uma abordagem um pouco diferente em comparação com o UIKit. Neste artigo, iremos abordar como escrever testes básicos de UI para views SwiftUI, utilizando o framework XCTest.

Configurando o Ambiente de Testes

  1. Abra seu projeto no Xcode.
  2. Navegue até a pasta Tests, normalmente encontrada no navegador de projeto.
  3. Crie um novo arquivo Swift (por exemplo, MyAppUITests.swift) se você ainda não tiver um.

Agora, vamos entrar no processo de teste.

View Básica SwiftUI

Vamos criar uma view SwiftUI simples que iremos testar. Aqui está um exemplo de um aplicativo contador:

import SwiftUI

struct CounterView: View {
    @State private var count: Int = 0

    var body: some View {
        VStack {
            Text("Contagem: \(count)")
                .font(.largeTitle)

            Button(action: {
                count += 1
            }) {
                Text("Incrementar")
            }
            .padding()
        }
    }
}

struct CounterView_Previews: PreviewProvider {
    static var previews: some View {
        CounterView()
    }
}

Esta view contém um rótulo Text que exibe a contagem e um botão para incrementar essa contagem.

Escrevendo Testes Unitários

Agora, vamos escrever testes para nossa CounterView. Queremos garantir que a interface do usuário se atualize corretamente com base na interação do usuário. Veja como fazer isso:

Importando Módulos Necessários

No seu arquivo de teste, certifique-se de importar SwiftUI e XCTest:

import XCTest
import SwiftUI
@testable import SeuModuloApp

Criando a Classe de Teste

Em seguida, vamos criar uma classe de teste para nossa CounterView. Veja como fica:

class CounterViewTests: XCTestCase {
    func testCounterIncrements() {
        let view = CounterView()
        let hostingController = UIHostingController(rootView: view)

        // Inicialmente, a contagem deve ser 0
        XCTAssertEqual(view.count, 0)

        // Simulando o pressionamento do botão
        hostingController.rootView.count += 1

        // Agora verificamos se a contagem foi incrementada
        XCTAssertEqual(view.count, 1)
    }
}

Executando o Teste

No Xcode, você pode executar seus testes selecionando Product > Testar no menu ou usando o atalho Command + U. Certifique-se de que seu teste passe confirmando que a contagem é incrementada como esperado.

Testando a Apresentação da View

Para testar se a view é apresentada corretamente sob condições específicas, você pode usar testes de snapshot ou validações mais simples, dependendo do seu cenário. No entanto, para checagens mais avançadas, você pode querer incluir bibliotecas de Teste de Snapshot, como iOSSnapshotTestCase, para regressões visuais.

Exemplo de Teste de Apresentação da View

Você pode testar se o texto reflete com precisão o valor do contador:

func testCounterViewDisplaysCorrectCount() {
    let view = CounterView()
    let hostingController = UIHostingController(rootView: view)

    // Começa com contagem 0
    XCTAssertEqual(view.count, 0)
    XCTAssertEqual(hostingController.rootView.body, Text("Contagem: 0").body)

    // Simulando a ação de incrementar
    view.count += 1
    hostingController.rootView = view

    // Agora deve exibir contagem como 1
    XCTAssertEqual(view.count, 1)
    XCTAssertEqual(hostingController.rootView.body, Text("Contagem: 1").body)
}

Conclusão

Nesta aula, passamos pelos passos de configuração de testes básicos para views SwiftUI. Testar é crucial para garantir que sua UI se comporte conforme o esperado e ofereça uma boa experiência ao usuário.

Usando as técnicas discutidas aqui, você pode começar a construir um conjunto robusto de testes para suas aplicações SwiftUI, garantindo que suas views funcionem corretamente à medida que seu aplicativo evolui. Boas codificações!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!