2014-10-06 24 views
8

Tôi muốn chạy thử nghiệm đang chờ phản hồi của trình duyệt.Sử dụng lược đồ URL trong XCTestCase

Mục tiêu thử nghiệm có Info.plist nơi tôi có thể đăng ký lược đồ URL tùy chỉnh. Nhưng những người đó không bao giờ được gọi. Tôi biết rằng một mục tiêu thử nghiệm không phải là một ứng dụng thực sự.

Có cách nào không?

CHỈNH SỬA (cho tiền thưởng): Tôi muốn viết bài kiểm tra tích hợp cho một lớp học gọi số openUrl("tel://" + some phone number). Làm cách nào để đăng ký lược đồ URL này trong XCTestCase?

+0

Bạn có thể đạt được những gì bạn cần với NSURLProtocol không? –

+0

Bạn có thể thuật lại ý nghĩa của bạn bằng cách 'đăng ký một lược đồ URL' không? Bạn có nghĩa là, làm thế nào để bạn xác định ứng dụng được gán để xử lý một chương trình cụ thể? Hoặc bạn có nghĩa là, làm thế nào để bạn kiểm tra xem liệu openURL thực sự thực hiện hành động? –

+0

Ứng dụng của tôi được đăng ký vào một lược đồ URL như sau: myapp: //. Tôi muốn kiểm tra xem tôi có thể mở http://mywebsite.com trong trình duyệt mà sẽ chuyển hướng đến myapp: // cuối cùng không. – McZonk

Trả lời

-1

Tôi không chắc chắn chính xác những gì bạn đang cố gắng thử nghiệm. Tôi cho rằng đó là điều gì đó hơn là URL có thể được mở hay không. Trường hợp kiểm tra bên dưới sẽ kiểm tra xem FaceTime có mở và có thể mở URL không. Nếu ứng dụng bạn đang thử nghiệm đăng ký một chương trình tùy chỉnh, thì chỉ cần thay đổi pathToTestApplication sẽ hoạt động.

enter image description here

class NSURL_SchemeTests: XCTestCase { 

    func testWhoHandlesSchemeTel() { 
     let testAppURL = NSURL(string: pathToTestApplication) 

     // create a NSURL for the test 
     let tel = "tel:5555555555" 
     let url = NSURL(string: tel) 
     XCTAssert(url != nil, "Could not create a URL from \(tel)") 

     // determine whether any application is registered to handle the URL 
     let workspace = NSWorkspace.sharedWorkspace() 
     let urlHandler = workspace.URLForApplicationToOpenURL(url!) 
     XCTAssert(urlHandler != nil, "No application found to open URL \(tel)") 

     // determine whether the expected test application is registered to handle the URL 
     XCTAssert(urlHandler! == testAppURL, 
      "Application \(pathToTestApplication) was not registered to handle URL \(tel)") 

     // attempt to open the URL 
     XCTAssert(workspace.openURL(url!), "Could not open URL \(tel)") 
    } 
} 
+0

Tôi muốn kiểm tra xem ứng dụng của tôi có được đăng ký thành công vào một lược đồ URL hay không và nó có được gọi lại khi myapp: // được mở hay không. – McZonk

+0

Mục tiêu kiểm tra rằng mã XCT này là một phần của thực sự sẽ kiểm tra xem ứng dụng của bạn có được đăng ký để xử lý lược đồ hay không.Bài kiểm tra cuối cùng cũng sẽ xác định liệu nó có được truyền đạt thành công với ứng dụng hay không. Tuy nhiên, nếu bạn muốn xem những gì ứng dụng của bạn thực sự nhận được từ ứng dụng thử nghiệm, bạn sẽ phải tự thiết lập ứng dụng. –

1

Câu hỏi đã được retagged OS X nên câu trả lời của tôi là không còn giá trị

Original câu trả lời

này là không thể. Lý do cơ bản là các thử nghiệm được kết nối với một cá thể ứng dụng đang chạy, chúng không có quyền kiểm soát thiết bị, chúng đang chạy như một phần của ứng dụng. Bạn có thể mở URL nhưng bạn sẽ không thể quay lại ứng dụng và thực hiện xác nhận.

Cũng lưu ý rằng XCUnit là một khung kiểm tra đơn vị. Bạn sẽ không thể viết bài kiểm tra tích hợp nâng cao trong đó. Bạn có thể thành công hơn với UI Automation nhưng trường hợp kiểm tra cụ thể này sẽ rất phức tạp ngay cả đối với nó. Ví dụ: để mở liên kết bằng ứng dụng của bạn trong trình mô phỏng, bạn có thể tạo trang HTML sẽ chuyển hướng đến liên kết và sau đó sử dụng trình bao tới exec open testLink.html -a "iOS Simulator". Tuy nhiên, theo quan điểm khiêm tốn của tôi, loại kiểm tra này không đáng tin cậy và thực sự khó viết và gỡ lỗi.

Lời khuyên của tôi sẽ được:

  1. Viết một bài kiểm tra đơn vị đó chế giễu [UIApplication openURL:] và xác minh rằng bạn đang đi qua một URL đúng với nó. Hoặc nếu bạn muốn hướng khác, hãy viết một bài kiểm tra đơn vị sẽ gọi các phương thức UIApplicationDelegate theo thứ tự được gọi, mô phỏng việc mở một liên kết bằng ứng dụng của bạn. Đây là như xa bạn có thể đi với XCUnit.
  2. Kiểm tra phần còn lại theo cách thủ công.
+0

Câu hỏi của tôi là về OS X. Tôi chưa bao giờ hỏi về iOS. Nhưng tôi đoán bạn là đúng. Không thể đăng ký thử nghiệm cho một lược đồ URL. – McZonk

+0

@McZonk Bạn đã gắn thẻ 'cocoa-touch'. – Sulthan

+0

Không có Tingley trung thành đã làm. Tuy nhiên tôi nghĩ rằng vấn đề sẽ tồn tại cho cả hai nền tảng. – McZonk

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