Espere as expectativas com um exemplo de tempo


Ao escrever um determinado teste assíncrono usando XCTest e XCTestExpectation eu gostaria de afirmar que um determinado bloco não foi executado. O código a seguir é bem-sucedido ao afirmar que um bloco foi executado e se não o teste falhar. Não há parece ser uma maneira óbvia para executar isso ao contrário onde o teste é bem sucedido se o bloco não executar após o tempo limite e falha se ele executado antes do tempo limite. Acrescentando a isto, gostaria de afirmar que o bloco executado em um momento posterior, quando uma condição diferente é atendida. Existe uma maneira simples de fazer isso com XCTestExpectation ou vou ter que criar uma solução perguntou 16 fevereiro em 0: 09One dos aspectos mais difíceis de testar código multithreaded está sincronizando entre o thread de teste e os threads iniciados pelo código que está sendo testado. Se você obter a sincronização errada, o teste pode terminar antes de todos os segmentos que iniciou terminaram. Isso pode tornar o teste retornar falsos positivos, porque ele não detecta falhas nos threads de fugitivo. Ou os fios podem interferir com testes posteriores, causando falhas de teste intermitentes que são difíceis de localizar e eliminar. JMocks 1 Synchroniser 2 tem uma solução astuciosa ainda simples que se baseia na construção de máquina de estado existente jMocks 3. Um teste pode dizer ao Sincronizador para esperar por uma máquina de estado para entrar ou sair de algum estado. O teste precisa armazenar o Sincronizador em um campo: Agora o teste pode definir máquinas de estado e usar o sincronizador para esperar que essas máquinas de estado entrem ou saem de um determinado estado. Isso deve ser combinado com um tempo limite para garantir que o teste não espere para sempre se o sistema em teste nunca atende aos critérios aguardados. Um tempo limite pode ser passado para o método waitUntil ele lança uma TimeoutException com uma mensagem informativa se o tempo limite expirar. Ou, você pode obter sua estrutura de teste para o tempo limite do teste. Por exemplo, no JUnit 4 4 você pode passar um parâmetro de tempo limite para a anotação Test. 1. JMocks: jmock. org 2. Sincronizador: jmock. org/000762.html 3. construção de máquina de estado: jmock. org/states. html 4. JUnit 4: junit. org Documentação Suporte de UsuárioSwift tem um problema especial para mostrar a exceção correta Quando os fechos estão presentes no mesmo âmbito. Eu vi o mesmo problema em um XCTestCase que usou dispatchafter e até mesmo através do ponto de interrupção de exceção era a mesma linha como waitForExpectationsWithTimeout o caso de teste estava falhando por causa de um downcast em um objeto nil. Eu sei que este não é o seu caso, mas sempre que isso acontece eu sugiro remover as declarações de uma linha de cada vez e executando o teste após cada remoção. Se o teste não falhar, você identificou o culpado. Esta é, infelizmente, a melhor opção no momento desta escrita sempre que Swift mostra um ponto de interrupção de exceção em uma linha que não faz sentido, especialmente a infame linha 0 de uma classe que você pode ver em ferramentas de relatório de falhas. Deixe-nos saber se você descobriu seu acidente.

Comments

Popular Posts