тесты не работают в паровом приложении

Мне не удалось заставить тесты работать в моем приложении Vapor. Похоже, компоновщик просто не находит ни одного из тестируемых классов приложений. Чтобы сузить проблему, я попытался создать простейший из возможных тестов, используя шаблон приложения по умолчанию. Шаги показаны ниже. Если кто-нибудь может сказать мне, что я делаю неправильно, или что они могут воспроизвести проблему, я был бы очень благодарен.

  1. Создайте новый проект.
$ vapor new Foo
Cloning Template [Done]
$ cd Foo
$ mkdir -p Tests/ModelTests
  1. Добавьте фиктивный тест, который ссылается на класс в проекте по умолчанию.
$ cat > Tests/ModelTests/PostTests.swift
import XCTest
@testable import App

class PostTests: XCTestCase {
  func testPost() {
    print(Post.self)
    XCTAssertEqual("a", "a")
  }
}
^D
  1. Создайте проект.
$ vapor build
No Packages folder, fetch may take a while...
Fetching Dependencies [Done]
Building Project [Done]
  1. Запустите тесты.
$ vapor test
Testing [Failed]
Log:
swift-test: error: no tests found to execute, create a module in your `Tests' directory
  1. К сожалению, похоже, нам нужно удалить «Тесты» из раздела exclude: Package.swift.
$ vi Package.swift
   ... remove Tests from exclude: ....
  1. Попробуйте еще раз.
$ vapor test
Testing [Failed]
Log:
<unknown>:0: error: build had 1 command failures
swift-test: error: exit(1): /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-build-tool -f /Users/mark/tmp/Foo/.build/debug.yaml test
  1. Попробуйте напрямую выполнить командную строку, показанную выше.
$ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-build-tool
-f /Users/mark/tmp/Foo/.build/debug.yaml test
Linking ./.build/debug/FooPackageTests.xctest/Contents/MacOS/FooPackageTests
Undefined symbols for architecture x86_64:
  "__TMaC3App4Post", referenced from:
      __TFC10ModelTests9PostTests8testPostfT_T_ in PostTests.swift.o
      __TMaMC3App4Post in PostTests.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)
<unknown>:0: error: build had 1 command failures

Такое же поведение я вижу и в своем собственном проекте: компоновщик не находит классы из приложения, на которое ссылается тест.

Решено, см. комментарий ниже.


person Mark Smith    schedule 13.11.2016    source источник
comment
Я считаю, что имена тестовых модулей применяются SwiftPM, попробуйте назвать свой тестовый модуль AppTests и посмотрите, решит ли это некоторые проблемы.   -  person Logan    schedule 14.11.2016
comment
О мой Бог. Куда мне отправить твою бутылку лучшего в мире виски?   -  person Mark Smith    schedule 14.11.2016


Ответы (1)


Пишите в комментариях, но чтобы люди могли увидеть ответ, я отмечу и здесь:

SwiftPM применяет соглашения об именах для тестов, поэтому правильное имя будет <#YourTarget#>Tests.

В этом случае переименуйте тестовый модуль AppTests, и это должно сработать!

person Logan    schedule 14.11.2016
comment
Кроме того, если вы такой же идиот, как и я, дважды проверьте, что ваш файл Package.swift не содержит Tests в массиве exclude. - person Xavier Lowmiller; 25.05.2017