Estou executando a swift test
partir 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.
Se eu remover o uso de KeyMapping
, tudo funcionará bem:
func testExample() {
// let keyMapping = KeyMapping()
XCTAssertNotNil(true , "PASS")
}
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 )
Consegui construir e testar seu pacote com sucesso fazendo as seguintes modificações:
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)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 packagemain.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:
main.swift
arquivo para garantir que o pacote possa ser vinculadoPor 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.
deixe-me dizer algumas palavras