2010-05-19 26 views
5

CẬP NHẬT: Tôi đã kết thúc từ bỏ và thêm GHUnit vào dự án của tôi để thay thế. Tôi đã đứng dậy và chạy với GHUnit chỉ trong vài phút.OCUnit thử nghiệm một khuôn khổ nhúng

UPDATE: Bạn có thể tải dự án Xcode đây: http://github.com/d11wtq/Cioccolata

Tôi đã thêm một thử nghiệm chỉ tiêu Đơn vị tới dự án Xcode của tôi, nhưng nó không tìm thấy khuôn khổ của tôi khi nó được xây dựng, nói:

Test.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.

Khung của tôi (mục tiêu dự án chính) được thiết kế để nhúng và do đó có đường dẫn cài đặt @executable_path/../Frameworks.

Tôi đã đánh dấu khung làm phụ thuộc trực tiếp của mục tiêu thử nghiệm và tôi đã thêm nó vào giai đoạn xây dựng "Liên kết nhị phân với Thư viện".

Ngoài ra tôi đã thêm bước đầu tiên (sau khi nó được xây dựng phụ thuộc) của "Sao chép tệp", chỉ cần sao chép khuôn khổ vào thư mục Khung của gói thử nghiệm đơn vị.

Bất kỳ ai có kinh nghiệm về điều này? Tôi không chắc những gì tôi đã bỏ lỡ.

EDIT | Tôi khá chắc chắn tôi không phải, vì một khung công tác không thực thi được, nhưng tôi chưa đặt "Test Host" và "Bundle Loader". Điều này nên (hiểu biết của tôi) tất cả đều ok vì gói thử nghiệm được liên kết với khung và sẽ tải nó giống như bất kỳ gói nào khác.

EDIT | Tôi nghĩ tôi gần như ở đó. Tôi đọc bài viết sau đây quy định việc sử dụng @rpath thay vì @executable_path.

http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/

Trong trường hợp này nó làm cho cảm giác hoàn hảo kể từ khi gói thử nghiệm OCUnit là KHÔNG một thực thi, đó là một bó cũ đồng bằng, vì vậy @executable_path là không tương thích. Vì vậy, bây giờ khuôn khổ của tôi có thư mục cài đặt của nó thiết lập để @rpath và mục tiêu thử nghiệm có đường dẫn tìm kiếm thời gian chạy của nó (rpath) được định nghĩa là thư mục xây dựng. Điều này tiết kiệm cho tôi phải sao chép khuôn khổ vào gói thử nghiệm và có nghĩa là toàn bộ khung kết quả là linh hoạt hơn nhiều trong tự nhiên vì nó có thể sống ở bất cứ đâu.

Bây giờ, tôi cũng nhận thấy rằng nên đã đặt Trình tải gói trên mục tiêu Kiểm tra, do đó, điều này hiện được đặt thành đường dẫn của nhị phân khung.

Tôi có thể tạo mục tiêu thử nghiệm và tôi có thể #import các lớp học khỏi khung công tác, không có lỗi. Nhưng ngay sau khi tôi cố gắng thuyết minh một lớp từ khuôn khổ tôi nhận được lỗi sau:

/Developer/Tools/RunPlatformUnitTests.include:412: note: Started tests for architectures 'i386' /Developer/Tools/RunPlatformUnitTests.include:419: note: Running tests for architecture 'i386' (GC OFF) objc[50676]: GC: forcing GC OFF because OBJC_DISABLE_GC is set Test Suite '/Users/chris/Projects/Mac/Cioccolata/build/Debug/Test.octest(Tests)' started at 2010-05-21 12:53:00 +1000 Test Suite 'CTRequestTest' started at 2010-05-21 12:53:00 +1000 Test Case '-[CTRequestTest testNothing]' started. /Developer/Tools/RunPlatformUnitTests.include: line 415: 50676 Bus error "${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}" /Developer/Tools/RunPlatformUnitTests.include:451: error: Test rig '/Developer/Tools/otest' exited abnormally with code 138 (it may have crashed). Command /bin/sh failed with exit code 1

phương pháp thử nghiệm của tôi không gì hơn là phân bổ và sau đó phát hành một lớp HelloWorld Tôi tạo ra để giúp gỡ cài đặt này:

- (void)testNothing { 
    CTHelloWorld *h = [[CTHelloWorld alloc] init]; 
    [h release]; 
} 

Nếu tôi thay thế các dòng mã này bằng STAssertTrue(YES, @"Testing nothing"); lỗi sẽ biến mất, mặc dù lớp vẫn đang được nhập.

+0

Bất kỳ cách nào bạn có thể nhập dự án của mình và đăng trực tuyến? Tôi sẽ sẵn sàng để có một cái nhìn nhanh chóng. Tôi đã vật lộn với một vấn đề tương tự một thời gian nhưng không thể nhớ chính xác những gì tôi đã làm. Nhìn vào một dự án bị hỏng có thể giúp rattle não của tôi. –

+0

Tôi đang đưa nó lên github bây giờ ... sẽ đăng trong một đánh dấu. – d11wtq

+0

Không thực sự nhiều trong cách của mã bí mật ở đây. Nó hầu như không bắt đầu;) http://github.com/d11wtq/Cioccolata – d11wtq

Trả lời

4

Vì không ai khác đã nói về câu hỏi này, tôi sẽ kết thúc bằng cách nói rằng SenTestingKit thực sự không làm tôi ấn tượng với sự phức tạp (và sự xấu xí) của thiết lập cho các nhu cầu của tôi. Tôi rất khuyên bạn nên GHUnit chạy trong một giao diện người dùng (hoặc trên dòng lệnh nếu bạn thích) và hỗ trợ bằng cách sử dụng gdb ra khỏi hộp. Nó đã cho tôi một vài phút để tải về và sử dụng GHUnit trong dự án của tôi.

Nó cũng vậy. Apple nên gửi nó với Xcode thay vì SenTestingKit IMHO.

+1

Xuất phát từ thế giới Visual Studio + ReSharper, GHUnit chỉ là những gì bác sĩ đã ra lệnh. Chúng ta phải nói chuyện này ... có vẻ tàn nhẫn khi tiếp tục cho phép các học viên TDD tiếp tục với công cụ SenTesting theo cách nó được đóng gói cùng với Xcode ngay bây giờ. – Hugh

1

Bạn có thể có một số may mắn với article sau đây, đặc biệt thêm DYLD_FRAMEWORK_PATH và DYLD_LIBRARY_PATH vào tệp thực thi của bạn có thể hữu ích.

+0

Xin chào, cảm ơn vì liên kết. Tôi đã thử thêm các cài đặt này vào cấu hình xây dựng cho mục tiêu thử nghiệm nhưng tôi vẫn gặp phải vấn đề tương tự. Hừm. – d11wtq

2

Điều đó đã xảy ra với tôi một vài lần. Tôi biết bạn đã chuyển sang GHUnit, nhưng chỉ trong trường hợp ai đó quan tâm: sau khi thực hiện điều này trong một thời gian dài, tôi nhận ra rằng Xcode không thêm các lớp mã (các tệp .m) vào phần Biên dịch của đích, nhưng trong phần Tài nguyên bản sao của mục tiêu. Di chuyển nó đến đúng nơi đã giải quyết được vấn đề.

1

Ok, vì vậy tôi cũng chiến đấu với điều này, và đây là những gì tôi đã tìm thấy là giải pháp đơn giản cho vấn đề:

  1. Tạo ứng dụng của bạn/khuôn khổ
  2. Tạo bó thử nghiệm của bạn "mục tiêu thêm ", không đặt phụ thuộc vào chính
  3. Kéo tệp bạn muốn thử nghiệm từ lớp học của bạn vào" nguồn biên dịch "của mục tiêu nhóm thử nghiệm của bạn
  4. Tạo trường hợp thử nghiệm của bạn, chỉ thêm chúng vào mục tiêu nhóm thử nghiệm
  5. biên dịch mục tiêu thử nghiệm, chạy thử nghiệm.

Lưu ý, điều này có nghĩa là bạn chỉ cần biên dịch mục tiêu gói thử nghiệm khi bạn muốn chạy thử nghiệm. Lý tưởng, không; làm việc, vâng.

Apple thực sự tự động hóa điều này và làm cho nó hoạt động chính xác, ra khỏi hộp.

0

Tôi đồng ý với các đề xuất cho GHUnit, nó hoàn toàn đá!

Tuy nhiên, tôi đã chuyển sang sử dụng OCTest sau khi Apple tích hợp nó trong xCode4 vì vậy tôi đang trudging thông qua các vấn đề.

Sự cố liên kết được báo cáo ở đây xảy ra với tôi sau khi chúng tôi thêm tệp mới vào dự án. Chúng bao gồm ViewControllers và xibs nhưng các tệp đã được đánh dấu bằng xcode cho cả ứng dụng và mục tiêu thử nghiệm. Tôi đã phát hiện ra các tệp bằng cách kiểm tra gói OCTest trong thư mục dữ liệu có nguồn gốc. ~/Library/Developer/Xcode/DerivedData/Nhấp chuột phải và chọn "Hiển thị nội dung gói" từ công cụ tìm. Hãy tìm những thứ không thuộc về đó, ví dụ: các lớp ứng dụng và tài nguyên. Việc xóa các tệp này khỏi "Nguồn biên dịch" hoặc "Sao chép tài nguyên gói" đã sửa lỗi liên kết.

3

Tôi gặp vấn đề tương tự nhưng với khung kiểm tra Đơn vị Kiwi. Vấn đề của tôi là "Máy chủ thử nghiệm" không được đặt trong Cài đặt xây dựng. Khi tôi đặt nó thành $ (BUNDLE_LOADER), mọi thứ hoạt động hoàn hảo. Được xác minh bằng Xcode 4.5.2 iOS SDK 6.0.

Các vấn đề liên quan