Configurando testes de unidade em projetos Swift + Objective-C mistos

Este artigo será pequeno, vou explicar quais problemas surgiram ao criar uma meta para teste em um projeto ObjectiveC + Swift misto e bastante antigo, e como consegui resolvê-los.

A primeira coisa que é confusa: um erro em um destino de teste pode afetar o lançamento de um autoteste de outro destino de teste. Você pode adicionar qualquer número de destinos para teste no projeto, eles geralmente se baseiam no destino principal do projeto e são automaticamente adicionados ao seu esquema de inicialização. Portanto, ao executar qualquer autoteste nesse esquema, o restante será compilado e um erro em uma das tarifas de teste interferirá no lançamento das outras. Para isolar esse efeito, você pode criar esquemas diferentes para diferentes destinos de teste.

Anexarei uma captura de tela muito trivial, apenas para maior clareza:





A próxima edição são as dependências entre Objecive-C e Swift.
No seu projeto é criado:

MyProject-Bridging-Header.h : esse arquivo contém os nomes dos arquivos de cabeçalho ObjectiveC usados ​​no swift.
MyProject-swift.h : cria implicitamente o código para as classes swift usadas nas classes ObjectiveC.
MyProject-Prefix.pch : o arquivo de pré-compilação também pode conter dependências de várias maneiras, incluindo construções do tipo:

#ifdef __OBJC__ #import "MyProject-Swift.h" #endif 

Seus autotestes também podem criar essas dependências. Ao adicionar o primeiro arquivo rápido, o Xcode oferece a criação de um arquivo de cabeçalho de ponte para este destino de teste. Tudo funciona como um encanto. Em teoria, o conteúdo do autoteste do cabeçalho da ponte deve complementar a ponte principal, mas, de fato, ocorre uma substituição. Portanto, para ter acesso a todas as classes do projeto no autoteste, nesta opção, especifique o cabeçalho da ponte do destino principal (figura acima).

Vá para Xcode Target -> BuildSetting e verifique os seguintes parâmetros:
Cabeçalho de ponte Objective-C
Nome do cabeçalho da interface gerada pelo Objective-C
Especifique os principais arquivos de destino.

No entanto, se você puxar o cabeçalho da ponte principal, todas as dependências começam a se esticar. Portanto, você também deve preencher os seguintes parâmetros com dados do projeto principal:
Caminhos de pesquisa da estrutura
Caminhos de pesquisa de cabeçalho
Caminho de pesquisa da biblioteca
Outros sinalizadores de vinculador
Os caminhos de pesquisa do caminho de execução NÃO precisam ser alterados.

Então outro problema estranho foi descoberto:
Por alguma razão, em projetos mais antigos, o destino do teste recebe o mesmo Nome do Módulo do Produto que o principal. Isso não impediu o único ObjectiveC, mas ao adicionar agilidade ao projeto, dois problemas surgem.

O primeiro problema é que, neste caso

 @testable import MyProject 

o arquivo de autoteste é ignorado e você não pode acessar as classes Swift.

O segundo problema é que esse destino na compilação substitui o MyProject-swift do destino principal e impede a compilação de outros destinos. Este parâmetro precisa ser renomeado.

Com isso, meu autoteste foi iniciado e foi possível usar os arquivos do projeto, o que eu também desejo para você!
Como não trabalho frequentemente na criação de um projeto, todos os comentários e conselhos práticos sobre esse tópico são bem-vindos.

Obrigado a todos que leram.

Source: https://habr.com/ru/post/pt460961/


All Articles