Waitforexpectationswithtimeout error
Waitforexpectationswithtimeout error
Obter através da App Store Leia esta publicação em nosso aplicativo!
waitForExpectationsWithTimeout falha.
Estou tentando testar um pedido assíncrono com XCTest e, portanto, usando expectationWithDescription :. No entanto, quando waitForExpectationsWithTimeout é chamado, ele imediatamente trava mesmo sem esperar o tempo limite. Eu até tentei colocar a operação de preenchimento logo após apenas excluir uma questão de tempo limite, mas não altera as coisas; Esta é a minha função:
O mesmo comportamento acontece em outras funções. Se eu tirar a operação waitForExpectationsWithTimeout e manter a operação expectationWithDescription, ela falha no final da função. Em ambos os casos, o crash repot é o seguinte:
Você pode tentar fornecer a implementação para o manipulador. De acordo com o parâmetro handler do docs não é opcional em waitForExpectationsWithTimeout markup:
Portanto, você pode tentar fornecer um manipulador descompactado explicitamente (mesmo um vazio irá fazer o trabalho):
Além disso, você pode tentar seguir esta postagem e ver se você obtém um registro de falhas mais apropriado.
Eu assisti a conversa específica na WWDC14 e saiu com a seguinte implementação:
é muito semelhante ao original, mas para a posição do comando waitForExpectationsWithTimeout, que parece ser crucial.
aguarde Expectativas (timeout: handler :)
Espera até que todas as expectativas sejam cumpridas ou o tempo limite seja alcançado.
Declaração.
Parâmetros.
A quantidade de tempo dentro do qual todas as expectativas devem ser cumpridas.
Um bloqueio opcional XCWait Completion Handler para invocar quando todas as expectativas foram cumpridas ou quando o tempo limite de espera é disparado. (O tempo limite é sempre tratado como uma falha de teste).
Discussão.
Este método cria um ponto de sincronização no fluxo de um teste. Apenas uma espera For Expectations (timeout: handler :) pode estar ativo em qualquer momento, mas múltiplas seqüências discretas de "criar expectativas e esperar que elas sejam cumpridas" podem ser encadeados.
Este método aguarda as expectativas criadas apenas com os métodos de conveniência da XCTest Case & # x27 ;. Este método não espera as expectativas criadas manualmente por meio de inicializações no XCTest Expectation ou suas subclasses.
Para aguardar as expectativas criadas manualmente, use os métodos wait (for: timeout :) ou wait (for: timeout: force Order :) ou os métodos correspondentes no XCTWaiter, passando uma lista explícita de expectativas.
Os clientes não devem manipular o loop de execução ao usar esta API.
À espera de expectativas.
Espera um grupo de expectativas até o tempo limite especificado.
Espera uma série de expectativas e especifica se elas devem ser cumpridas na ordem dada.
Um bloco a ser chamado quando uma chamada para aguardar For Expectations (timeout: handler :) tem todas as suas expectativas cumpridas, ou expirou.
Teste assíncrono com Xcode 6.
Em 2013, a Apple enviou uma estrutura de teste renovada no Xcode chamada XCTest, e houve muita alegria. A estrutura antiga não tinha sido atualizada há anos, e várias ferramentas e frameworks de teste de terceiros surgiram para fornecer novos recursos e recursos. Foi bom ver as ferramentas incorporadas recebendo algum amor novamente, e este ano, a Apple está enviando alguns recursos com o Xcode 6 que faltavam na atualização do ano passado. Um que particularmente me agrada ver é o suporte para testes assíncronos.
Se tivermos um teste que tenha que iniciar uma tarefa assíncrona, seja executado em outro tópico ou no runloop do thread principal, como podemos testá-lo?
Considere uma solicitação na web. Poderíamos iniciar uma solicitação na web e passar em um bloco de conclusão, depois fazer as nossas afirmações de teste, seja no manipulador de conclusão ou não. No entanto, como o pedido na Web ainda não foi feito, muito menos uma resposta recebida nem o nosso bloqueio de conclusão foi chamado, nosso método de teste vai sair antes que as afirmações sejam testadas.
Vamos ver um teste para uma classe que faz o download de páginas da web. Normalmente, não queremos fazer pedidos reais na web em testes. Em vez disso, nós superamos os pedidos usando alguma ferramenta (eu sou parcial para OHHTTPStubs). Mas para os propósitos desses exemplos, iremos quebrar algumas regras e fazer pedidos reais da web.
Podemos dar à classe em teste um URL e bloco de manipulação de conclusão, e irá baixar a página e chamar o bloco, passando por uma seqüência de caracteres contendo a página da web ou uma string vazia se ocorrer uma falha. Não é uma ótima API, mas, novamente, estamos quebrando algumas regras. No entanto, o código de teste abaixo nunca falhará. O método de teste retornará sem dar a conclusão do bloqueio de Handler uma chance de ser chamado.
Antes da versão do XCódigo 6 da XCTest, apenas usando o que vem na lata com Xcode, poderíamos sentar e girar em um ciclo de tempo que chama o loop de execução do thread principal até a resposta chegar ou algum período de tempo limite tenha decorrido. Aqui está o código de teste de trabalho, o antigo caminho.
O loop while roda o loop de execução do thread principal por 10 milissegundos de cada vez até a resposta chegar, ou até 5 segundos decorrer sem que ele tenha chegado. Isso é útil. Não é terrível. Não é o fim do mundo do desenvolvimento de software ", mas não é ótimo.
Agora, é uma maneira melhor.
Altas expectativas.
Com Xcode 6, a Apple adicionou expectativas de teste ao framework XCTest na forma da classe XCTestExpectation. Quando criamos uma expectativa de teste, a estrutura de teste espera que ela seja cumprida em algum momento no futuro. Nosso código de teste cumpre a expectativa no bloco de conclusão com uma chamada para o método XCTestExpectation. Isso toma o lugar de definir uma bandeira como responseHasArrived no exemplo anterior. Em seguida, contamos que o framework de teste espera (com um tempo limite) para que suas expectativas sejam cumpridas através do método XCTestCase waitForExpectationsWithTimeout: handler:. Se o manipulador de conclusão for executado dentro do tempo limite e as chamadas forem cumpridas, todas as expectativas do teste serão cumpridas. Caso contrário, o teste irá viver uma existência triste, solitária, não cumprida, até que se torne fora do escopo. E vivendo uma existência triste, solitária e insatisfeita, quero dizer que a expectativa falha no teste após o tempo limite.
A expectativa falhada não deveria se sentir tão abatida. Lembre-se de que um resultado falido não é o sinal de um teste ruim; um resultado indeterminado é. Essa expectativa pode sentir orgulho, pois declara falha.
Aqui é um exemplo usando XCTestExpectation:
Crie a expectativa com uma descrição para tornar os resultados mais legíveis. No bloco de conclusão, chame [expectativa preenchida] para dizer o teste que esta expectativa, de fato, foi cumprida. Então, saia no waitForExpectationsWithTimeout: manipulador: até que a solicitação seja enviada, a resposta chega e o nosso manipulador de conclusão é chamado ou o tempo limite ocorre.
Isso é bom, objetivo-C, mas também podemos fazê-lo na nova e brilhante linguagem swift da Apple.
E isso é isso. É uma classe fácil de usar para testar o código assíncrono.
Não podemos obter informações suficientes sobre iOS 8 e Swift? Junte-se a nós para o início do iOS com Swift e Advanced iOS bootcamps.
Posts Relacionados:
Comentários recentes.
Desenvolvimento de aplicativos.
Treinamento em equipe.
Empresa.
Direitos autorais e cópia; 1998 - 2017 Big Nerd Ranch, LLC. Todos os direitos reservados. | Política de Privacidade.
Sistema Forex sd.
Opções binárias de comércio da Olympus.
Aguarde expectativas com um erro de tempo.
O erro funciona bem quando a tarefa assíncrona termina antes do tempo limite. Mas se a tarefa demorar mais do que o tempo limite, as coisas ficam mais complicadas. Infelizmente, chamar o método de preenchimento depois que o tempo limite expirou falha no conjunto de testes com este erro :. Claro que posso verificar se o teste está concluído antes de chamar o método de preenchimento como este :. Mas isso parece excessivamente complicado e torna o teste muito mais difícil de ler. Estou esquecendo de algo? Existe uma maneira mais simples de resolver esse problema? Sim, há uma maneira muito mais simples de evitar esse problema de violação da API: Embora não esteja claramente documentado, a expectativa será liberada quando o tempo limite expirar. Portanto, se a tarefa demorar mais do que o tempo limite, a variável expectativa será nula quando o manipulador de conclusão da tarefa for chamado. Assim, o método de cumprimento será chamado nil, sem fazer nada. Estou trabalhando em um OpenStack Swift Drive para OSX. Quando uma pasta é excluída localmente com o Finder, a exclusão eventualmente se propaga para o Servidor, eu precisava de um teste que aguarda a atualização do servidor. Para evitar a falha na violação da API, alterei minhas expectativas para ser "expectativas de expectativa fraca até agora e alterei a chamada para realizá-la para" zeroFoldersExpectation ". Isso corrigiu os acidentes. Em vez de criar expectativa como variável fraca como sugerido nesta resposta, acho que você espera que as especificações anteriores também sejam definidas como variável de bloco e nula no manipulador de conclusão de waitForExpectationsWithTimeout :. Ao postar suas expectativas de espera antes, você concorda com a política de privacidade e os termos de serviço. Perguntas de sobreposição de pilha Trabalhos Documentação beta Tags Usuários. Inscreva-se ou inicie sessão para personalizar a sua lista. Tour Comece aqui para obter uma visão geral rápida do site Centro de ajuda Respostas detalhadas para qualquer dúvida que você possa ter Meta Discussão sobre o funcionamento e as políticas deste site Sobre nós Espere antes de mais informações sobre o Stack Overflow da empresa Business Saiba mais sobre a contratação de desenvolvedores ou publicação de anúncios com a gente. Entrar Inscrever-se. Junte-se à Comunidade de transbordamento de pilha. Stack Overflow é uma comunidade de 7. Junte-se a eles; só demora um minuto: violação da API - chamada - [XCTestExpectation cumpre] após o contexto de espera ter terminado. E quando o código usa o MRC em vez do ARC? As referências fracas só são suportadas com ARC de erro, então você terá que fazer a transição para o ARC. Com essa abordagem, eu me preocuparia se a expectativa pudesse ser desalinhada antes mesmo de usar, mas acho que isso não está acontecendo se isso estiver funcionando para você. Isso é realmente útil e faz um teste legível do que outra solução de bloqueio. Obrigado por me salvar muito tempo. Eu encontrei o mesmo problema, mas no meu caso eu precisava do erro de versão Waitforexpectationswithtimeout a resposta acima. Jorge Costa 1 3. Em vez de criar expectativa como variável fraca como sugerido nesta resposta, acho que você também pode definir é bloqueio de bloco variável e nulo no manipulador de conclusão de waitForExpectationsWithTimeout: Piotr 5, 1 21 Eu acho que você também precisa falhar se o CompleteHandler é chamado de volta. XCTFail "não deve ser concluído" e remova o resto do código no erro. Sim, você pode fazer isso. Mas o teste também deve falhar automaticamente quando a expectativa não é cumprida no tempo. Normalmente, eu também imprimo erros no console no manipulador de conclusão. Ele falhará porque o cumprimento não foi chamado. Isso é confiável e simples. Com referência fraca, observei que a expectativa não é anulada após o tempo limite. Pode depender de como a expectativa é referenciada no código. Não é necessário investigar a relação de referência, já que apenas atribuir nil, em vez disso, está bem. Inscreva-se ou faça login StackExchange. Inscreva-se usando o Facebook. Assine usando e Senha. Poste como um Nome de Convidado. O estouro de pilha funciona melhor com JavaScript habilitado. MathOverflow Matemática Cross Estatísticas validadas Teórico Ciência da Computação Física Química Biologia Ciência da Computação Filosofia mais 3. Meta Stack Exchange Stack Apps Área 51 Talking Overflow Talent.
3 pensamentos sobre & ldquo; Waitforexpectationswithtimeout error & rdquo;
Registros oficiais do condado de Riverside, Califórnia, que engrossam o.
Em 2003, uma lula com manto de 2,5 metros de comprimento foi capturada perto da Antártida.
A produção de fogo direta ou indiretamente destruiu a propriedade e a imagem dos personagens, Snopes e Pap.
No comments:
Post a Comment