Как проверить класс в пакете Swift? - PullRequest
0 голосов
/ 28 января 2019

В настоящее время я пытаюсь понять механизм импорта зависимостей в пакет Swift, и у меня возникла проблема с тестами.Надеюсь, кто-то может объяснить, что я делаю не так.Я собираюсь описать проблему шаг за шагом, чтобы вы могли легко ее воспроизвести.

Итак, я создаю новый пакет Swift с использованием swift package init --type executable.Эта команда создает базовую структуру пакета Swift:

Artems-MacBook-Pro:SwiftExample artem$ swift package init --type executable
Creating executable package: SwiftExample
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/SwiftExample/main.swift
Creating Tests/
Creating Tests/LinuxMain.swift
Creating Tests/SwiftExampleTests/
Creating Tests/SwiftExampleTests/SwiftExampleTests.swift
Creating Tests/SwiftExampleTests/XCTestManifests.swift

Сам пакет называется SwiftExample.Как видите, команда также создает пример случая модульного теста (SwiftExampleTests.swift).

Затем я создаю простой класс с именем Car.swift и помещаю его в каталог Sources/SwiftExample/Classes/:

// Sources/SwiftExample/Classes/Car.swift
class Car {
    init() {
        print("I'm a car!")
    }
}

В файле main.swift я могу создать экземпляр класса Car, и все работает довольно хорошо:

// Sources/SwiftExample/main.swift
print("Hello, world!")

let car = Car()

Вывод будет:

Hello, world!
I'm a car!

Но проблема в том, что я не могу использовать этот класс в моем тестовом файле.Например, я пытаюсь создать экземпляр класса Car в функции testExample() файла SwiftExampleTests.swift:

import XCTest
import class Foundation.Bundle

@testable import SwiftExample

final class SwiftExampleTests: XCTestCase {
    func testExample() throws {

        let car = Car()

        <other code goes here>
   }

   <other code goes here>
}

Как видите, я импортировал сам модульиспользуя ключевое слово @testable.Но когда я запускаю команду swift test, я получаю странную ошибку:

Compile Swift Module 'SwiftExample' (2 sources)
Compile Swift Module 'SwiftExampleTests' (2 sources)
Linking ./.build/x86_64-apple-macosx10.10/debug/SwiftExample
/Users/artem/Playgrounds/SwiftExample/Tests/SwiftExampleTests/SwiftExampleTests.swift:9:13: warning: initialization of immutable value 'car' was never used; consider replacing with assignment to '_' or removing it
        let car = Car()
        ~~~~^~~
        _
Linking ./.build/x86_64-apple-macosx10.10/debug/SwiftExamplePackageTests.xctest/Contents/MacOS/SwiftExamplePackageTests
Undefined symbols for architecture x86_64:
  "_$S12SwiftExample3CarCACycfC", referenced from:
      _$S17SwiftExampleTestsAAC04testB0yyKF in SwiftExampleTests.swift.o
  "_$S12SwiftExample3CarCMa", referenced from:
      _$S17SwiftExampleTestsAAC04testB0yyKF in SwiftExampleTests.swift.o
ld: symbol(s) not found for architecture x86_64
<unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)
error: terminated(1): /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-build-tool -f /Users/artem/Playgrounds/SwiftExample/.build/debug.yaml test output:

Я, конечно, что-то делаю не так, но не могу найти никакой информации по этому вопросу в официальных документах.Кто-нибудь знает, что здесь происходит и как это исправить?

...