Estou escrevendo uma visualização personalizada de progresso no UIKit:
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
