O teste Swift dá o erro "Símbolos indefinidos para arquitetura x86_64"

TrungDQ:

Estou executando a swift testpartir da linha de comando para executar os casos de teste. Este é o caso de teste:

import XCTest
@testable import vnk_swift

class KeyMappingTests: XCTestCase {
    static var allTests : [(String, (KeyMappingTests) -> () throws -> Void)] {
        return [
            // ("testExample", testExample),
        ]
    }

    func testExample() {
        let keyMapping = KeyMapping()
        XCTAssertNotNil(keyMapping , "PASS")
    }
}

E aqui está a mensagem de saída.

imagem

Se eu remover o uso de KeyMapping, tudo funcionará bem:

    func testExample() {
        // let keyMapping = KeyMapping()
        XCTAssertNotNil(true , "PASS")
    }

imagem

Parece que há um problema quando tento usar uma classe. Como faço para corrigir isso?

(Eu não usei o Xcode para este projeto quando comecei swift package init, o código-fonte para este projeto está aqui: https://github.com/trungdq88/vnk-swift )

Cristik:

Consegui construir e testar seu pacote com sucesso fazendo as seguintes modificações:

  • renamed the package name to VnkSwift, for some reasons the build tool doesn't like dashes in package name, nor it works when you have underscores in the generated package name (so renaming the package to vnk_swift to make sure the import statement and the package name match didn't work)
  • renamed the test folder to VnkSwiftTests in order for the linker to know what to link against; seems this is a precondition for the linker to know to link against the package
  • finally, renamed main.swift to something else (I used utils.swift). The thing is that the presence of main.swift instructs the build tool to generate an executable, and linking against an executable doesn't work very well. After the rename, had to comment the if code, as global running code can only belong to main.swift.

To conclude:

  • Evite nomes de pacotes não alfanuméricos
  • O nome do pacote e o nome do diretório de teste devem estar sincronizados
  • Certifique-se de não ter um main.swiftarquivo para garantir que o pacote possa ser vinculado

Por que não pode um link de destino de teste de unidade contra executáveis?

É porque tanto o pacote de teste quanto o pacote executável têm código de execução global (também conhecido como função principal), de modo que o vinculador não sabe qual deles escolher. Ao testar a partir do Xcode, o pacote de teste é executado no contexto do aplicativo - ele não se vincula a ele, como na situação aqui.

O Xcode também tem esse problema ao criar uma ferramenta de linha de comando - você não pode fazer o teste de unidade desse alvo, se quiser fazer o teste de unidade do código, então você deve criar uma biblioteca que será vinculada pela ferramenta e pelo alvo do teste de unidade ( ou inclua os arquivos em ambos os destinos)

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

A compilação do teste de unidade Xcode falhou com o erro "Símbolos indefinidos para a arquitetura x86_64"

Erro de compilação / vinculação: símbolos indefinidos para arquitetura x86_64

Símbolos indefinidos para arquitetura x86_64: erro de ligação?

Erro de compilação da visualização da tela SwiftUI: símbolos indefinidos para arquitetura x86_64

Símbolos indefinidos para arquitetura x86_64 (encontrei um erro, mas não consigo corrigi-lo.)

Não foi possível encontrar a fonte do erro: 'Símbolos indefinidos para a arquitetura x86_64' Makefile

Erro do vinculador Apple Mach-O - símbolos indefinidos para arquitetura x86_64: "_UISceneWillEnterForegroundNotification" e "___isPlatformVersionAtLeast"

Erro do Crashlytics "Símbolos indefinidos para a arquitetura x86_64" durante a instalação do pod

Símbolos indefinidos para arquitetura x86_64: e não consigo encontrar o motivo

Falha de compilação do Xcode "Símbolos indefinidos para arquitetura x86_64"

Símbolos indefinidos para a arquitetura x86_64 ao construir para o Simulador

O que isso significa: símbolos indefinidos para arquitetura x86_64 "_main"

A compilação do xCode Cocoapods falha "Símbolos indefinidos para a arquitetura x86_64"

o que significa "Símbolos indefinidos para arquitetura x86_64:" em c?

gcc 4.7.4 Problema de vinculação: Símbolos indefinidos para arquitetura x86_64

Símbolos indefinidos para arquitetura x86_64: ao fazer uma chamada para uma função C ++ no Xcode 8

OpenPose: símbolos indefinidos para arquitetura x86_64: libcaffeproto.a (caffe.pb.cc.o)

Símbolos indefinidos para arquitetura x86_64 durante a implementação de mensagens do firebase no módulo Libgdx ios

Símbolos indefinidos para arquitetura x86_64: "_read_line", referenciados em: _insert in inventory-82371b.o

FBSDKLoginManager: símbolos indefinidos para arquitetura x86_64 + comando do linker falhou com o código de saída 1

Símbolos indefinidos para a arquitetura x86_64: "_OBJC_CLASS _ $ _ CMMotionManager", referenciado em: objc-class-ref no GooglePlus (GPPSpamSignal.o)

Símbolos indefinidos para a arquitetura x86_64: "_OBJC_CLASS _ $ _ CMMotionManager", referenciado em: objc-class-ref no GooglePlus (GPPSpamSignal.o)

Símbolos indefinidos para a arquitetura x86_64 -> símbolo (s) não encontrado (s) para a arquitetura x86_64

Reagir a construção nativa do iOS falhou no envio de código por: Símbolos indefinidos para a arquitetura x86_64:

Símbolos indefinidos para arquitetura x86_64 e comando do linker falharam com o código de saída 1

Erro "Símbolos indefinidos para arquitetura x86_64" ao usar vários arquivos

Binários FFMPEG lançam erro: Símbolos Indefinidos para Arquitetura x86_64

Erro do vinculador: "Símbolos indefinidos para arquitetura x86_64"

Erro: símbolos indefinidos para arquitetura x86_64: .... problema de vinculador

TOP lista

  1. 1

    Obtendo apenas o número de uma String C #

  2. 2

    como acessar a conexão do banco de dados em visualizações no codeigniter 4

  3. 3

    Como redimensionar tabelas geradas pelo Stargazer no R Markdown?

  4. 4

    recuperar valores em uma linha de dataframes com base no valor em outro

  5. 5

    Firebase Storage Web: como fazer upload de um arquivo

  6. 6

    为什么在使用argc和argv时不会出现分段错误?

  7. 7

    Como agrupar objetos em uma lista em outras listas por atributo usando streams e Java 8?

  8. 8

    Qual é a diferença entre o tamanho do passo e a taxa de aprendizado no aprendizado de máquina?

  9. 9

    Por que definir a variável como uma string vazia não é necessária em meu código?

  10. 10

    Insert a value to hidden input Laravel Blade

  11. 11

    Configure o coletor de arquivos Serilog para usar um arquivo de log por execução do aplicativo

  12. 12

    Como ler arquivos yaml em laravel?

  13. 13

    Série Fibonacci usando programação dinâmica

  14. 14

    Como adicionar elementos a um array multidimensional em PHP?

  15. 15

    How do I set an IronPython ctypes c_char_p pointer to an absolute address that is not a valid memory address to read from?

  16. 16

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  17. 17

    Como faço para que um formulário no Access se torne uma janela pop-up?

  18. 18

    Como anexar um arquivo a um e-mail usando JavaMail

  19. 19

    Adicionar campos de texto dinâmicos por meio da seleção suspensa de componentes?

  20. 20

    如何使用SOM算法进行分类预测

  21. 21

    TypeError não capturado: não é possível atribuir a propriedade somente leitura

quentelabel

Arquivo