Không thể tải mô-đun bên dưới cho XCTest


180

Tôi đang làm việc nhanh chóng trên Xcode và theo mặc định, nó tạo ra một tệp thử nghiệm tham chiếu XCTest.

Khi tôi đặt thành viên mục tiêu cho dự án chính của mình, nó gây ra lỗi này

Không thể tải mô-đun bên dưới cho XCTest

Nếu thành viên mục tiêu này không được thiết lập, các bài kiểm tra sẽ chạy đúng và mọi thứ đều hoạt động tốt.

Tái bút: Tôi mới đến swift và đây có lẽ là một câu hỏi ngớ ngẩn (xin hãy khai sáng cho tôi)


17
Không có câu hỏi câm châu chấu, chỉ có người hỏi câm. ;-) Câu hỏi tuyệt vời vì mọi người đọc nó sẽ có cùng một vấn đề.
Lance Kind

Câu trả lời:


168

Dự án chính không liên kết với khung XCUnit. Bạn nên tạo một mục tiêu thử nghiệm riêng cho dự án của mình, nếu một mục tiêu chưa tồn tại và thêm các tệp nguồn thử nghiệm của bạn vào mục tiêu đó.

  1. Chọn dự án của bạn trong Project Navigator. Điều này sẽ mở các cài đặt của dự án trong trình chỉnh sửa.
  2. Nhấp vào nút "+" ở cuối cột liệt kê các Mục tiêu của bạn.

nhập mô tả hình ảnh ở đây

  1. Nếu bạn đang làm việc trên một mẫu dự án iOS , hãy chọn iOS > Test > iOS Unit Testing Bundle.

    Nếu bạn đang làm việc trên một mẫu dự án OS X , hãy chọn OS X > Test > OS X Unit Testing Bundle.


3
Trong khi đó đối với iOS, nó được gọi là Gói UITesting iOS (sử dụng nó cho Kiểm tra giao diện người dùng) hoặc Gói kiểm tra đơn vị iOS (dành cho Kiểm tra đơn vị ...)
kuzdu

184

Kiểm tra kỹ xem tệp đang được đề cập không nằm trong mục tiêu chính mà thay vào đó chỉ là mục tiêu kiểm tra. Chỉ mục tiêu thử nghiệm sẽ có khung đó để nhập.


16
Nếu nó giúp. Chọn mục tiêu 'Không kiểm tra' -> Xây dựng giai đoạn -> Biên dịch nguồn. Đảm bảo "ClassTest.swift" của bạn không nằm trong mục tiêu xây dựng thông thường.
Nick N

Và nếu nó nằm trong gói chính và gói thử nghiệm, làm thế nào để bạn gỡ bỏ nó khỏi gói chính.
James Robinson

1
Cảm ơn @NickN, bạn đã chỉ ra vấn đề chính xác mà tôi đang gặp phải và hiện đã được khắc phục!
Naishta

Nếu nó có trên Target Target thì tôi dường như không thể truy cập bất kỳ phương thức thử nghiệm chính nào trong Target Target của mình.
UKDataGeek

cảm ơn nó đã làm việc như một lá bùa chỉ cần loại bỏ các tập tin thử nghiệm làm việc.
Ccr

32

Bạn vừa thêm tệp / lớp kiểm tra của mình vào mục tiêu chính và không nhầm lẫn với mục tiêu kiểm tra. Đơn giản như vậy.

Giải pháp:

1) Xóa tệp kiểm tra khỏi danh sách "Nguồn biên dịch" trên tab "Xây dựng giai đoạn" cho mục tiêu chính

2) Thêm cùng một tệp vào "Nguồn biên dịch" trên tab "Xây dựng giai đoạn" cho mục tiêu thử nghiệm

Nó phải giải quyết vấn đề


15

Tôi gặp lỗi này nếu tôi tạo mục tiêu khung động macOS, liên kết đến XCTest.framework (mục tiêu là mục tiêu khung, không phải mục tiêu thử nghiệm!).

Trong trường hợp này, vấn đề được giải quyết bằng cách thêm

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks

để dự án "Xây dựng cài đặt / Đường dẫn tìm kiếm khung".


Hoàn hảo! Cảm ơn!
Lance Kind

9
Tốt hơn: $(PLATFORM_DIR)/Developer/Library/Frameworkstrong trường hợp bạn có nhiều phiên bản Xcode được cài đặt dưới các tên khác nhau (ví dụ: phiên bản phát hành và phiên bản beta).
cướp mayoff

Cảm ơn @robmayoff đây là giải pháp chính xác ;-)
Oliver Pearmain

Đây là câu trả lời chính xác khi xây dựng một khung để hỗ trợ thử nghiệm.
Daniel Wood

7

Sau rất nhiều lần khắc phục sự cố và nảy xung quanh các trang Stack Overflow như trang này, tôi đã tìm được một chi tiết không được đề cập trên các trang khắc phục sự cố Đơn vị iOS khác.

Nếu dự án của bạn sử dụng CocoaPods, hãy đảm bảo bao gồm mục tiêu thử nghiệm của bạn được lồng bên trong mục tiêu của ứng dụng chính của bạn. Podfile của bạn có thể không bao gồm nó nếu bạn đã tạo mục tiêu thử nghiệm của mình sau khi chạy pod init. Podfile của bạn sẽ trông giống như thế này:

target 'YourApp' do
    target 'YourAppTests' do
        inherit! :search_paths
        # Pods for testing
    end
end

Hãy nhớ lưu podfile của bạn và chạy pod installsau khi làm như vậy.

Hy vọng nó giúp!


5

Điều này có thể hơi muộn nhưng những gì bạn phải làm là:

Nhấp vào Tệp> Mới> Mục tiêu> Gói thử nghiệm đơn vị iOS.

Và sau đó thêm các bài kiểm tra của bạn trong đó. Điều này làm việc cho tôi. Vấn đề là tôi đã không chọn tạo các bài kiểm tra đơn vị khi tôi tạo dự án của mình. Hy vọng điều này sẽ giúp được ai đó.


2

Vấn đề này xảy ra hai lần trong dự án của bạn.

  1. Khi bạn không thêm UnitTestingBundle trong dự án của bạn khi tạo Dự án mới.
  2. Khi bạn cài đặt CocoaPods trong Dự án của bạn đôi khi không phải lúc nào cũng vậy.

1: Trả lời:

  • Đi đến Tệp Bấm vào Tệp.

  • Sau đó, bạn thấy tùy chọn đầu tiên Mới Nhấp vào nó.

  • Sau khi nhấp vào nó, bạn thấy một số tùy chọn Nhấp vào Target.

  • Và sau đó trong Searchbar Tìm kiếm Gói thử nghiệm đơn vị IOS và Thêm vấn đề được giải quyết.

  • nếu Trình biên dịch không thể cho phép bạn thêm phần này thì hãy thử Phương thức thứ hai khi được đưa ra Dưới đây.

2. Trả lời Bài toán của Cốc Cốc:

  • Đi đến Sản phẩm Nhấp vào Sản phẩm.

  • Nhấp vào làm sạch hoặc nhấn cmd + k.

  • Vấn đề được giải quyết.


2

Mặc dù câu trả lời được chấp nhận giải quyết vấn đề này trong nhiều lần, có một cách nữa bạn có thể gặp phải lỗi này.

Nếu bạn đã đảm bảo rằng:

Như được chỉ ra bởi @pwc @ nick-n và những người khác

  1. Các ClassTest.swifttập tin cho các thành viên mục tiêu bằng cách đảm bảo rằng nó được chỉ gắn liền với mục tiêu thử nghiệm.
  2. Các ClassTest.swiftkhông thể nhìn thấy dưới bạn chính mục tiêu ứng dụng> Nguồn xây dựng> Compile Nguồn

Đây là những gì bạn có thể kiểm tra:

trong .podspecstập tin của bạn

Đảm bảo rằng bạn source_fileskhông trực tiếp hoặc gián tiếp bao gồm thư mục thử nghiệm.

ví dụ :

s.source_files = ["Classes/**/*.{swift}", "Classes/**/*.{xib}"]
s.exclude_files = ["Classes/Exclude", "Classes/MyPodProjTests/"]

Lưu ý Classes/**/*.{swift}bao gồm mọi thứ ghi đè thực tế là thư mục MyPodProjTestsphải được loại trừ.

Giải pháp:

s.source_files = ["Classes/MyPodProj/**/*.{swift}", "Classes/**/*.{xib}"]

Lưu ý: Đây là trường hợp cực kỳ khó khăn và lỗi hoàn toàn của con người nhưng tôi nghĩ nó sẽ có giá trị chỉ ra.


Nhận xét tuyệt vời, tôi đã bao gồm tất cả mọi thứ trong tôi s.source_files. Cảm ơn!
Mauricio Chirino

1

Đảm bảo Tư cách thành viên mục tiêu được kiểm tra cho tất cả các mô-đun khi khung kiểm tra được chọn. Bạn có thể xem tùy chọn Tư cách thành viên mục tiêu bằng cách chọn Xem-> Tiện ích-> Hiển thị trình kiểm tra tệp


1

Trong trường hợp của tôi, tôi đã thực hiện các thử nghiệm cho một nhóm riêng tư, vì vậy trong podspec giống như:

s.test_spec 'Tests' do |test_spec|
test_spec.source_files = 'Tests/*.swift' end

Nhưng trong Podfile, tôi đã quên mang theo đặc tả thử nghiệm, như sau:

target 'MyApp' do
use_frameworks!
pod 'CoconutLib', '~> 1.0', :testspecs => ['Tests'] end

0

Tôi đã làm tất cả những điều trên, nhưng tôi vẫn không được phép truy cập các phương pháp mà tôi muốn thử nghiệm. Nhưng trước khi tôi viết bất kỳ trường hợp thử nghiệm nào đã xây dựng dự án một lần và sau đó các phương thức có thể truy cập được để kiểm tra. Vì vậy, hãy thử nó và cho tôi biết nếu nó giải quyết bất kỳ vấn đề.


0

Tôi đã có cùng một vấn đề và giải pháp cho tôi là:

  1. Chọn sơ đồ của tôi
  2. Chỉnh sửa sơ đồ ...
  3. Sau đó, khi cửa sổ cấu hình Scheme được mở, chọn tab bên trái có tên "Test" để được chuyển hướng ở đây: nhập mô tả hình ảnh ở đây
  4. Giống như bạn có thể thấy UITests của tôi không được thêm vào đây nhưng tồn tại trong dự án của tôi, vì vậy tôi chỉ cần nhấn nút cộng và chọn mục tiêu UITests của mình như thế này: nhập mô tả hình ảnh ở đây
  5. Sau đó nhấn nút "Thêm" và đóng chế độ xem cấu hình
  6. Kết thúc với một dự án sạch và thử lại nó sẽ hoạt động
  7. Và đừng quên xác minh điều đó: https://developer.apple.com/l Library / archive / qa / qa1954 / _index.html

Hy vọng câu trả lời này sẽ giúp.

PS: một suy nghĩ cuối cùng trong mục tiêu Thử nghiệm của tôi trong cài đặt bản dựng Tôi phải kiểm tra các thuộc tính không được cấu hình đúng:

DEBUG_INFORMATION_FORMAT = dwarf; 
ONLY_ACTIVE_ARCH = YES;
VALIDATE_PRODUCT = NO;

0

Giống như @Alfishe đã đề cập ở trên:

Bạn phải xóa các tệp kiểm tra từ Compiler Sourcesbên dướiBuild Phases

Như hình dưới đây


nhập mô tả hình ảnh ở đây


1
Nếu bạn làm điều đó, bạn không thể thực hiện các bài kiểm tra, theo như tôi biết
Juan Curti


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.