Atualizei recentemente para o Xcode 7 beta 5. Tentei adicionar um teste de unidade a um projeto anterior, mas estou recebendo a mensagem de erro "Nenhum módulo [myModuleName]" na @testable import myModuleName
linha.
eu tentei
- Limpando o Projeto com a OptionPasta de Construção Limpa
- verificando se "Ativar testabilidade" (depuração) foi definido como Sim nas opções de compilação
- excluindo o destino dos testes e adicionando novamente o pacote de testes da unidade iOS
Nada disso funcionou para este projeto (mas eu testei para trabalhar em outro projeto). Alguém mais teve esse problema e resolveu?
ios
xcode
unit-testing
xctest
Suragch
fonte
fonte
Respostas:
Por favor, verifique o nome do módulo com o qual você tenta importar
@testable import "ModuleName"
. O nome do módulo deve ser o mesmo emTarget->Build Settings-> Product Module Name
fonte
space
e_
-
e_
. Um dos meus projetos tem menos-
no nome, mas o módulo tem sublinhado_
em vez""
idéia, e obteveExpected identifier in import declaration
Build Settings
selecionar o seu projeto (não o teste ou teste de UI), em seguida, procurarPRODUCT_MODULE_NAME
tudo o que aparecer não é o que deve ir atrás@testable import
A resposta que funcionou para mim
A resposta foi que eu tive alguns erros no meu projeto que estavam fazendo a compilação falhar. (Era apenas o bug padrão do seu dia-a-dia no código.) Depois que corrigi os erros e fiz outra limpeza e compilação, funcionou.
Observe que esses erros não apareceram no início. Para que eles apareçam:
Se houver outros erros, eles devem aparecer agora. Corrija-os e remova o comentário do código do arquivo de teste. O erro "Não existe esse módulo" desapareceu para mim.
Caso isso não resolva o problema para outras pessoas, você também pode tentar o seguinte:
Limpe a pasta de compilação
Abra o menu Produto, mantenha pressionado Optione clique em "Limpar pasta de compilação ..."
Verifique se Ativar testabilidade está definido como Sim
No Navegador de projeto, clique no nome do seu projeto. Selecione Configurações de compilação e role para baixo até Opções de compilação. Verifique se Ativar testabilidade é Sim (para depuração).
Exclua e adicione novamente seu destino de testes
Se você fez as outras coisas, meu palpite é que provavelmente não precisa fazer isso. Mas, se o fizer, lembre-se de salvar todos os testes de unidade que você já escreveu.
Clique no nome do seu projeto no Navegador de Projeto. Em seguida, selecione seu destino de testes. Clique no botão de menos (-) na parte inferior para excluí-lo.
Em seguida, clique no botão de adição (+) e escolha Pacote de testes de unidade do iOS para adicioná-lo novamente. Como você pode ver, você também pode adicionar um pacote de testes de interface do usuário da mesma maneira.
Algumas outras idéias
Ou...
Deixe um comentário ou resposta abaixo se você encontrou algo que funcionou.
Relacionado
fonte
O problema para mim foi que o destino de implantação do iOS dos testes não estava definido para ser o mesmo do destino principal. Portanto, verifique isso.
No seu alvo de teste:
fonte
Enable Bitcode
paraNo
o Bundle de teste.Então foi assim que eu comecei a fazer meu código funcionar depois de tentar todas as soluções sugeridas nas sugestões anteriores.
E tudo funcionou como charme. Espero que isto ajude.
fonte
Uma dica a se observar é que, se o nome do seu módulo tiver um caractere de hífen
-
, você deverá fazer referência a ele com uma barra inferior_
. Por alguma razão, eu suspeitava que isso pudesse ser um problema e esse era realmente o meu problema.por exemplo.
@testable import Ocean-Swift
torna-se@testable import Ocean_Swift
Apenas mais uma coisa, se você usar a
@testable
sintaxe, não inclua seu código de produção no seu destino de teste. Eu descobri que isso causará estranheza inexplicável.fonte
App (Dev)
, o módulo testável tornouApp__Dev_
Isso parece ser um erro nas configurações de compilação dos dois destinos. Você precisa garantir que:
ENABLE_TESTABILITY
é igual a Sim para ambos os destinos.PRODUCT_MODULE_NAME
valor do alvo do teste deve diferir do valor do aplicativo.fonte
Outra coisa a verificar: se você tem um projeto Objective-C, mas está escrevendo testes de unidade no Swift, verifique se o alvo principal usa pelo menos um arquivo Swift!
Mais informações:
Eu estava trabalhando em um projeto Objective-C, mas queria escrever testes de unidade no Swift.
Adicionei um arquivo Swift ao destino principal para gerar o arquivo ProjectName-Bridging-Header.h necessário, escrevi meus testes e tudo estava funcionando corretamente.
Mais tarde, apaguei o arquivo Swift porque pensei que não precisava dele (todo o código do alvo principal está no Objective-C ... eu estava apenas escrevendo testes no Swift).
Eu não notei um problema até mais tarde, depois que fiz uma "pasta de compilação limpa / limpa" e o problema "No Such Module" apareceu. Depois de alguns arranhões, adicionei um novo arquivo Swift em branco e o problema desapareceu.
Eu testei várias vezes com / sem o arquivo Swift, e ele só funciona com ele ... então, vou precisar deixar o arquivo em branco no projeto, converter alguns Objective-C em Swift ou adicionar alguns novo código para o projeto escrito em Swift.
fonte
@testable import Foo
linha, seus testes de unidade deverão ser executados corretamente.Para aqueles que rolaram até a última resposta e ainda nada funcionou, eis o que fez por mim depois de seguir todos os conselhos de outras respostas. Estou usando o Xcode 11:
O que causou o problema no meu caso foi que mudei o nome do produto
Eu não sabia que alterar o nome do produto também mudaria o Nome do módulo do produto , que é o usado para a importação do módulo nos meus arquivos de teste. Alterei minha importação da seguinte maneira:
@testable import New_Name
Funcionou
Espero que ajude
fonte
Depois de passar alguns dias nessas questões, finalmente consegui trabalhar com meu projeto. O problema estava no Bridging Header - o caminho no destino dos testes não pode ficar vazio se você estiver usando o Bridging Header no seu destino principal
Espero que isso economize algum tempo para alguém.
fonte
Verifique se, na configuração de compilação do esquema de teste, o destino do teste está na lista.
Ao lado do botão play, selecione o esquema de teste e, em seguida, Editar esquema ..., vá para a seção Build, clique em mais + e selecione o alvo com o qual você deseja testar.
No meu caso, temos um alvo interno com o qual desenvolvemos (algumas pequenas diferenças) e, após uma mesclagem, ele foi removido da configuração de teste.
fonte
Aqui está outra coisa a verificar que não está listada. Para mim, isso tinha algo a ver com a minha equipe, talvez porque o agente da nossa equipe ainda não tivesse concordado com o último Contrato de Licença! Depois que eu selecionei uma equipe diferente nas configurações gerais do meu destino, e especifiquei um destino de implantação específico como 12.1 ou 11.0, de repente o aviso "No Such Module" desapareceu.
fonte
No meu caso, tive três problemas. A primeira foi que eu tive que especificar o caminho de importação em:
A segunda foi que eu estava usando Pods e tive que importar esses pods para meus testes também usando:
O terceiro, como eu estava usando um cabeçalho de ponte no meu destino, tive que especificar que o cabeçalho de ponte fosse o mesmo para o teste.
fonte
Meu problema era que a classe que eu queria testar deveria estar em um módulo separado (API Client), mas a classe era na verdade um membro do destino do aplicativo e não o destino da estrutura. Alterar a associação de destino da classe fez com que o erro de importação desaparecesse!
fonte
Ambiente: Xcode Versão 9.0 (9A235)
Cenário: Testando uma estrutura de código-fonte aberto.
Eu tive o mesmo problema: 'Não existe esse módulo'.
Solução:
Aqui está o arquivo de teste:
fonte
Eu tive esse mesmo problema. Limpar a pasta de compilação e reiniciar o Xcode não funcionou.
O que funcionou para mim foi garantir que a configuração para "Criar somente arquitetura ativa" do seu destino e esquema de teste corresponda à configuração do destino e esquema do seu aplicativo.
fonte
Eu segui os passos acima, que funcionaram. No entanto, meu projeto teve mais alguns problemas. Recebi esse aviso e não pude acessar as classes do meu projeto principal para testar no meu destino de teste.
Descobri que o Nome do módulo do produto de destino de teste (YourTestTarget -> Configurações de compilação -> procurar
product module
) não pode ser o mesmo nome que o nome do seu projeto.Depois de alterar o nome do módulo do produto para o meu destino de teste, tudo funcionou.
fonte
Minha solução está aqui.
Primeiro, clique em OdeAlSwiftUITest.swift e verifique o Project TargetName na associação de destino.
fonte
Clique no MyAppTests.swift no navegador do projeto e clique no painel direito, verifique seu módulo na associação de destino. Funciona na minha.
fonte
Tentei todas as respostas aqui, mas a bandeira vermelha não desapareceu. Mas consegui que ele funcionasse apenas "executando" um teste vazio de qualquer maneira e esclareceu.
Coisas que eu gostaria de ter certeza de que estão feitas:
fonte
Para mim, a solução foi renomear @testable import myproject_ios para @testable import myproject depois de atualizar o nome do produto alvo myproject-ios em Build Settings / Packaging / Product Name / de $ {TARGET_NAME} para myproject.
fonte
Isso foi corrigido para mim quando alterei o Destino de Implantação de 9.3 para 11.0.
Geral> Destino de Implantação> "11.0"
fonte
Se você estiver usando o xcodebuild e encontrar esse problema, considere adicionar um sinalizador da área de trabalho ao comando build.
Alterou isto
Para isso
fonte
No destino do teste das configurações de compilação, verifique o teste do host, use o nome definido no PRODUCT_NAME. É esse nome que você deve usar nas classes de teste.
Recomendo não alterar o PRODUCT_NAME (corresponder ao nome do destino principal)
fonte
A CocoaPods recomenda adicionar
inherit! :search_paths
ao seu objetivo de teste da seguinte forma:Fonte: https://github.com/CocoaPods/CocoaPods/pull/8423#issue-244992565
fonte
Conforme descrito nesta resposta, eu estava adicionando testes Swift a um projeto apenas de Obj-C. A solução foi adicionar uma classe Swift fictícia, após a qual o Xcode solicitaria a adição de um cabeçalho de ponte e a remoção da classe Swift. Tudo estava bem depois disso.
fonte
Além das outras coisas listadas, tive que adicionar o arquivo com a classe que estava tentando testar nas minhas fontes de compilação para o módulo de teste de unidade
fonte
Eu acho que isso pode ter acontecido porque excluí os testes de exemplo.
Removai o pacote de teste da unidade e o adicionei novamente, como mostrado nas figuras abaixo, e tudo estava bem novamente.
fonte