No meu aplicativo para testes de unidade, nossa equipe depende muito da ferramenta para executar testes assíncronos - ConcurrencyExtras - withMainSerialExecutor
Essa ferramenta adiciona a possibilidade de lançar código de teste no thread principal, e também podemos adicionar await Task.yield()
um bloco para aguardar a conclusão de alguma operação demorada.
Funciona bem, mas parece que o tempo de execução dos testes aumentou, o que eu quero é encurtar o tempo de execução.
Até agora, a única solução que encontrei é sugerida aqui : adicionar
override func invokeTest() {
withMainSerialExecutor {
super.invokeTest()
}
}
No início de cada teste, e remove withMainSerialExecutor
em todos os lugares. Funciona, e agora meus testes assíncronos rodam mais rápido.
Minha pergunta é: por que ele reduziu o tempo de execução dos testes assíncronos? O que eu fiz foi basicamente forçar todos os testes a serem executados no thread principal, mas withMainSerialExecutor
o bloco adicionado manualmente fez a mesma coisa. Talvez alguém tenha outra solução para reduzir o tempo de execução dos testes assíncronos?
Exemplo de teste que passou da zona "longa" (mais de 0,1 segundos) para a curta
func testHasLoaded() async {
/// Arrange
sut = makeVM()
var hasLoaded = String()
sut.dataHasFinishedLoading = {
hasLoaded = "hasLoaded"
}
/// Assert
await Task.megaYield()
XCTAssertEqual(hasLoaded, "hasLoaded")
}
Original (0,11 segundos):
func testHasLoaded() async {
withMainSerialExecutor {
/// Arrange
sut = makeVM()
var hasLoaded = String()
sut.dataHasFinishedLoading = {
hasLoaded = "hasLoaded"
}
/// Assert
await Task.megaYield()
XCTAssertEqual(hasLoaded, "hasLoaded")
}
}