1

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. おっと、Package.swift の exclude: セクションから「Tests」を削除する必要があるようです。
$ 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

これは、私自身のプロジェクトでも見られる動作です。リンカは、テストで参照されているアプリのクラスを見つけられません。

解決しました。以下のコメントを参照してください。

4

1 に答える 1

2

コメントを入力してください。ただし、人々が回答を確認できるように、ここにもマークを付けます。

SwiftPM はテストに命名規則を適用するため、適切な命名は<#YourTarget#>Tests.

この場合、テスト モジュールの名前を変更AppTestsしてください。

于 2016-11-14T16:51:28.177 に答える