2011-01-09 44 views
5

Tôi đã theo dõi số instructions của Apple để thiết lập Thử nghiệm Đơn vị trong dự án của tôi. Tôi làm theo các hướng dẫn để làm cho họ phụ thuộc, vì vậy các bài kiểm tra chạy với mọi bản dựng của dự án chính của tôi. Điều này làm việc, và khi các bài kiểm tra của tôi trôi qua, ứng dụng chạy; khi họ không, tôi nhận được lỗi xây dựng trên các dòng của các bài kiểm tra đơn vị không thành công.Làm thế nào để bạn gỡ lỗi một bài kiểm tra đơn vị trong Xcode 3?

Tôi muốn, tuy nhiên, để có thể bước qua mã ứng dụng của tôi khi các thử nghiệm không thành công, nhưng không thể nhận được Xcode (3.2.5) được định cấu hình đúng cách. Dự án là một dự án Mac, không phải iOS.

Tôi đã thử các hướng dẫn herehere, nhưng việc thực thi không bao giờ dừng lại ở điểm ngắt mà tôi đã đặt, không trong mã kiểm tra đơn vị hoặc trong mã ứng dụng của tôi. Sau khi làm theo hướng dẫn đầu tiên, các điểm ngắt tôi đặt chuyển sang màu vàng với các đường viền màu xanh dương, và tôi cũng không biết điều đó có nghĩa là gì. Tôi cần phải làm gì để thực hiện các bài kiểm tra của mình?

Cập nhật

tôi tìm thấy một trang cố gắng để giải quyết vấn đề này (here) bằng cách thêm tham số và các biến môi trường để thực thi chính của tôi, nhưng một lần nữa, những người không gây ra thực hiện để dừng lại ở breakpoint của tôi. Tôi cũng nhận thấy rằng các báo cáo đăng nhập của thử nghiệm (phong phú) của tôi cũng không hiển thị trong Bảng điều khiển Debugger của tôi.

Tôi cũng phát hiện ra rằng các điểm ngắt màu vàng có nghĩa là mã không thể tìm thấy trong thời gian chạy. Đây là trong lớp trường hợp thử nghiệm của tôi, vì vậy mà chắc chắn có vẻ giải thích tại sao những người không bắn.

Trả lời

0

Điều duy nhất kết thúc làm việc cho tôi là nâng cấp lên Xcode 4. Nó tích hợp đẹp mắt. Đã có một little bit of pain trong việc chuyển sang nó, nhưng bây giờ nó kết thúc, sự tích hợp là rất tốt. Tôi hoàn toàn có thể bước qua các bài kiểm tra và mã ứng dụng của mình.

0

phát triển các bài kiểm tra đơn vị của bạn để chúng bao bọc một chương trình nằm trong một dự án có mục tiêu, sau đó chỉ cần mở dự án phụ thuộc và làm việc trong đó. điều này có thể là một dự án với một thư viện và một tập tin thực thi gọi qua thư viện (2 mục tiêu). sau đó bạn chỉ có thể mở dự án và gỡ lỗi, trong khi kiểm tra đơn vị của bạn trong sự phụ thuộc sau đó sẽ gọi thông qua thư viện này. đây là một cách tiếp cận kiểu mô-đun hơn.

chúc may mắn

2

Tôi thường không gặp sự cố khi gỡ lỗi các kiểm tra OCTest của mình bằng Xcode 3.2, bao gồm dừng tại điểm ngắt.

Ý tưởng cơ bản là yêu cầu gdb khởi chạy otest với gói của bạn làm đối số. Bạn sẽ làm điều đó bằng cách thêm /Developer/Tools/otest làm tệp thi hành tùy chỉnh cho dự án Xcode của bạn, sau đó chọn tên gói OCTest của bạn làm đối số duy nhất (chọn "Chỉnh sửa tệp thi hành thực thi" trong menu Dự án và trong tab thứ hai thêm một dòng với Foo.octest trong hộp trên cùng để gỡ lỗi kiểm tra Foo).

Bây giờ nếu bạn nhấn nút gỡ lỗi, nó sẽ bắt đầu gỡ lỗi nhóm thử nghiệm của bạn ngay bây giờ và sẽ dừng lại ở điểm ngắt đã khai báo (nếu bạn nhấn xây dựng và gỡ lỗi nó có thể không khởi động nếu thử nghiệm không vượt qua). Cũng lưu ý rằng bạn có thể phải đặt một biến môi trường thành YES để vô hiệu hóa việc thu gom rác thải (trong hộp dưới cùng của cùng một tab "Đối số"), otest sẽ cho bạn biết chính xác nếu bạn cần.

Nếu bạn đã làm mọi thứ ở trên và vẫn không thể bước vào mã thử nghiệm, điều này có thể do nó được biên dịch với thế hệ biểu tượng gỡ lỗi bị tắt - kiểm tra cài đặt xây dựng gỡ lỗi của bạn, nhưng rất có thể do mã kiểm tra không biên dịch lại. Tôi nói rất có thể, vì nhật ký của bạn không hiển thị trong bảng điều khiển, NSLog nên viết trong bảng điều khiển Xcode. Làm sạch thư mục xây dựng và bin của bạn theo cách thủ công, đôi khi khi bạn thay đổi đường dẫn hoặc tên, bạn sẽ tải mã lỗi thời. Bạn cũng có thể muốn kiểm tra xem tệp đã không nhảy ra khỏi mục tiêu thử nghiệm (là kiểm tra không thành công trong cùng một tệp không ghi nhật ký?).

1

Tôi cũng đã thử các giải pháp trong các liên kết mà bạn cung cấp, nhưng cũng không có giải pháp nào phù hợp với tôi. Nhưng sau đó tôi tìm thấy cái này: http://hiediutley.wordpress.com/2011/03/08/xcode3-debugging-ios-unit-tests/ - nó hoạt động giống như một nét duyên dáng :) Công cụ mới, quá.

+0

Rất tiếc, tôi không thể xác minh xem nó có hoạt động cho tôi nữa không, vì tôi đang sử dụng Xcode 4. – Dov

2

Tôi có một biến thể của những gì Hiedi Utley đăng tại http://hiediutley.wordpress.com/2011/03/08/xcode3-debugging-ios-unit-tests/. Những gì tôi không thích về nó là bản sao của các mục tiêu gói thử nghiệm đơn vị, một trong đó có một giai đoạn chạy Script để thực hiện các bài kiểm tra đơn vị sau khi xây dựng, và một khác mà không chạy các bài kiểm tra đơn vị. Tôi đã nhận thấy trong cửa sổ Get Info cho giai đoạn Run Script chuyển đổi "Chạy script chỉ khi cài đặt" và nghĩ rằng đó sẽ là một cách để chuyển đổi giữa chạy thử nghiệm đơn vị ở chế độ bình thường và chạy chúng trong trình gỡ lỗi.

Theo hướng dẫn của Hiedi, hãy tạo một mục Thực thi mới, nói LogicTestsGDB. Cấu hình nó như vậy:

chung Tab:

  • Đường dẫn: Developer/usr/bin/otest (Không hàng đầu /) Loại
  • Đường dẫn: Relative to Current SDK
  • Đặt thư mục làm việc để: Build Products directory

Đối số Ta b:

  • Đối số: Gói UnitTest (ví dụ: LogicTests.octest)
  • biến được đặt trong môi trường
    • DYLD_LIBRARY_PATH ... : ${BUILD_PRODUCTS_DIR}:${DYLD_LIBRARY_PATH}
    • DYLD_FRAMEWORK_PATH . : ${SDKROOT}/Developer/Library/Frameworks
    • DYLD_ROOT_PATH ...... : ${SDKROOT}
    • IPHONE_SIMULATOR_ROOT : ${SDKROOT}
    • OBJC_DISABLE_GC : YES
    • DYLD_NEW_LOCAL_SHARED_REGIONS : YES
    • DYLD_NO_FIX_PREBINDING : YES
    • CFFIXED_USER_HOME : ${HOME}/Library/Application Support/iPhone Simulator/

Xong. Bây giờ để gỡ lỗi các bài kiểm tra đơn vị của bạn,

  1. Hiển thị các giai đoạn xây dựng của gói và nhấp đúp vào giai đoạn Chạy tập lệnh.
  2. Kiểm tra các Run script chỉ khi cài đặt tùy chọn
  3. Đặt tích cực Target là bó đơn vị kiểm tra (LogicTests.octest ví dụ.).
  4. Đặt tích cực thực thi là thực thi mới được tạo ra (ví dụ. LogicTestsGDB)
  5. Bấm xây dựng và Debug

Để chạy bình thường, thực hiện kiểm tra đơn vị như một phần của việc xây dựng giai đoạn của ứng dụng:

  1. Hiển thị các giai đoạn xây dựng của gói và nhấp đúp vào giai đoạn Chạy tập lệnh.
  2. Bỏ chọn các Run script chỉ khi cài đặt tùy chọn
  3. Đặt tích cực Target là ứng dụng được xây dựng
  4. Đặt tích cực thực thi là ứng dụng được xây dựng

Để tự động hóa các bước trên, tôi đã tạo một tập lệnh AppleScript đơn giản chuyển đổi giữa hai trạng thái:

property kApplicationName : "MyApp" -- name of the normal application to build 
property kUnitTestName : "LogicTests" -- name of the bundle target to debug 
property kUnitTestRunner : "LogicTestGDB" -- name of the executable to use when debugging the unit test bundle 

tell application "Xcode" 
    tell the active project document 
    set theTarget to first target whose name is kUnitTestName 
     set thePhase to first run script phase of theTarget 
     if name of active target is kApplicationName then 
      set active target to theTarget 
      set theExecutable to first executable whose name is kUnitTestRunner 
      set active executable to theExecutable 
      set run only when installing of thePhase to true 
     else 
      set theTarget to first target whose name is kApplicationName 
      set active target to theTarget 
      set theExecutable to first executable whose name is kApplicationName 
      set active executable to theExecutable 
      set run only when installing of thePhase to false 
     end if 
     return "Targeting " & (name of active executable) 
    end tell 
end tell 
Các vấn đề liên quan