суббота, 21 апреля 2018 г.

Aguarde as expectativas com o tempo limite do exemplo


Ao escrever um determinado teste assíncrono usando XCTest e XCTestExpectation, 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 parece haver uma maneira óbvia de executar isso ao contrário, onde o teste é bem-sucedido se o bloco não for executado após o tempo limite e falhar se for executado antes do tempo limite. Além disso, gostaria de afirmar que o bloco foi executado mais tarde quando uma condição diferente é atendida. Existe uma maneira simples de fazer isso com XCTestExpectation ou será necessário criar uma solução alternativa solicitada 16 de fevereiro em 0: 09 Um dos aspectos mais complicados do teste de código multithread é a sincronização entre o thread de teste e os threads iniciados pelo código que está sendo testado. Se você obtiver a sincronização errada, o teste poderá ser concluído antes que todos os encadeamentos iniciados tenham sido finalizados. Isso pode fazer com que o teste retorne falsos positivos, porque ele não detecta falhas nos encadeamentos fugitivos. Ou os encadeamentos podem interferir nos testes posteriores, causando falhas de teste intermitentes que são difíceis de rastrear e eliminar. O JMocks 1 Synchroniser 2 tem uma solução inteligente, porém simples, que se baseia na construção de máquina de estado existente do jMocks 3. Um teste pode dizer ao Synchroniser para esperar que uma máquina de estado entre ou saia 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 aguardar que essas máquinas de estado entrem ou saiam 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 atender aos critérios aguardados. Um tempo limite pode ser passado para o método waitUntil. Ele lança um TimeoutException com uma mensagem informativa se o tempo limite expirar. Ou, você pode obter sua estrutura de teste para tempo limite do teste. Por exemplo, na JUnit 4 4 você pode passar um parâmetro de tempo limite para a anotação Test. 1. JMocks: jmock. org 2. Synchroniser: jmock. org/000762.html 3. construção de máquina de estado: jmock. org/states. html 4. JUnit 4: junit. org Documentação User SupportSwift tem problemas especiais para mostrar a exceção correta ponto de quebra quando os fechamentos estão presentes no mesmo escopo. Eu vi o mesmo problema em um XCTestCase que usou o dispatchafter e até mesmo através do ponto de interrupção de exceção era a mesma linha que waitForExpectationsWithTimeout o caso de teste estava falhando por causa de um downcast em um objeto nulo. Eu sei que este não é o seu caso, mas sempre que isso acontece, sugiro remover as instruções uma linha de cada vez e executar o teste após cada remoção. Se o teste não falhar, você identificou o culpado. Infelizmente, essa é a melhor opção no momento em que este texto é escrito sempre que o Swift mostra um ponto de interrupção de exceção em uma linha que não faz sentido, especialmente a linha infame 0 de uma classe que você pode ver nas ferramentas de relatório de falhas. Deixe-nos saber se você descobriu o seu acidente.

Комментариев нет:

Отправить комментарий