No XCTest posso usar expectation(forNotification:)
para testar notificações de postagem do NSNotificationCenter como:
func testLoginNotification() {
let notificationExpectation = expectation(forNotification: .login, object: nil, handler: nil)
methodPostNotificationLogin()
wait(for: [notificationExpectation], timeout: 2)
}
Como fazer isso em testes rápidos?
@Test fun loginNotification() {
#expect()
}
Você pode esperar diretamente pelas notificações no seu código de teste.
Você não precisa de
#expect
nada se quiser apenas detectar a existência de uma notificação. Assim que oasyncSequence
produz um elemento,next
retornará algum non-nilNotification
.Se você precisar de um limite de tempo menor, é um pouco mais complicado. Você pode envolver o acima em um
Task
, então iniciar outroTask
que espere por um tempo desejado antes de cancelar a primeira tarefa.O problema real aqui é que seus testes sempre estavam errados (no XCTest). Não faz sentido testar o NSNotificationCenter; esse é o código da Apple, não seu, e você já sabe o que ele faz.
O que você precisa testar é se seu código diz as coisas certas para o NotificationCenter _ e isso é algo que você pode fazer facilmente no Swift Testing simulando o centro de notificações. Você também pode precisar testar o que seu código faz quando uma notificação chega — e isso também é algo que você pode fazer facilmente no Swift Testing simulando o centro de notificações.
Se o centro de notificação real for acionado durante seus testes unitários, isso é um bug importante e precisa ser corrigido. Em outras palavras, o centro de notificação aqui é como a rede (você nunca deve testar a rede também). Teste apenas o sistema em teste , ou seja, seu código.