Swift / SwiftUI

Testando acessibilidade do UIKit em testes unitários - Ole Begemann

O autor escreve um teste unitário para verificar a acessibilidade de um progress view personalizado em UIKit, comparando com o comportamento padrão do UIProgressView. No entanto, descobriu-se que os testes não funcionam corretamente se não forem anexados a um alvo de aplicativo e exigem configurações adicionais como criar uma janela visível e definir um quadro não nulo para o componente em teste.

Compartilhar
A ring-shaped circular progress view

Estou escrevendo uma visualização personalizada de progresso no UIKit:

Uma visualização circular em forma de anel
Minha visualização circular

Um dos objetivos do design para a visualização é ser uma substituição plug-and-play para UIProgressView. Isso significa que ela deve modelar o API e comportamento do UIProgressView da maneira mais próxima possível. Um aspecto importante disso é a acessibilidade: idealmente, minha visualização de progresso não deve ser distinta para usuários de VoiceOver em comparação com uma visualização padrão do sistema.

Propriedades de acessibilidade em testes unitários

Para este fim, gostaria de escrever um teste unitário que falhe quando encontrar uma discrepância entre as configurações de acessibilidade da minha visualização e aquelas de um UIProgressView padrão. Antes de escrevermos esse teste, no entanto, devemos verificar quais são as propriedades de acessibilidade do UIProgressView para garantir que estamos vendo os dados corretos:

/// Testes simples das propriedades de acessibilidade dos controles do UIKit,
/// para provar que a configuração do teste está funcionando.
class UIAccessibilityTests: XCTestCase {
  func testUIProgressViewAccessibility() {
    let progressView = UIProgressView()
    progressView.progress = 0.4

    XCTAssertTrue(progressView.isAccessibilityElement)
    XCTAssertEqual(progressView.accessibilityLabel, "Progress")
    XCTAssertEqual(progressView.accessibilityTraits, [.updatesFrequently])
    XCTAssertEqual(progressView.accessibilityValue, "40%")
    // Mais asserções ...
  }
}

Dependendo do ambiente em que este teste é executado, algumas ou todas essas asserções falham inesperadamente:

  • No alvo de testes unitários para um framework, todas as asserções falham.
  • No alvo de testes unitários para uma aplicação iOS, apenas a primeira asserção (isAccessibilityElement) falha, as outras passam.

(E sim, sei que algumas das asserções dependem do idioma. Se seu aplicativo de teste tem localizações para outros idiomas além do inglês, você pode precisar configurar o idioma correto no esquema de construção ao executar o teste.)

Dominik Hauser descobriu que podemos fazer a primeira asserção passar adicionando a visualização a uma janela visível e dando-lhe um frame não nulo:

  func testUIProgressViewAccessibility() {
    let progressView = UIProgressView(frame: (CGRect(x: 0, y: 0

Fonte original

Conteúdo traduzido e adaptado pela redação do Notícias Mobile. Confira também a matéria na fonte original.

Leia a matéria completa