2012-12-14 49 views
11

Tôi chưa bao giờ sử dụng Kiểm tra Đơn vị và tôi hiểu việc sử dụng nó nhưng tôi không thực sự biết khi nào và cách sử dụng nó.Kiểm tra đơn vị XCode

Tôi muốn biết khi nào đáng để sử dụng Kiểm tra đơn vị, có thể với một số ví dụ.

+2

"khi nó có giá trị nó để sử dụng đơn vị kiểm tra" - một số người cho rằng nó luôn luôn không thể tránh khỏi; Tôi muốn nói rằng nó chỉ cần thiết cho các dự án lớn hơn ** và ** thư viện. –

+1

Tìm kiếm [tại đây] (http://stackoverflow.com/questions/33207/what-is-the-best-way-to-unit-test-objective-c-code). Hoàn thành thông tin về các tùy chọn và hướng dẫn kiểm tra đơn vị. – rsswtmr

+1

Sử dụng tốt là khi bạn có ứng dụng tạo kết nối url tới máy chủ. Bạn có thể thiết lập chúng một cách riêng biệt trong bài kiểm tra đơn vị, để kiểm tra chúng mà không cần phải chạy ứng dụng. –

Trả lời

9

Bạn hầu như luôn luôn kiểm tra đơn vị và bạn nên viết mã với các bài kiểm tra đơn vị trong tâm trí. Những người cực đoan viết các bài kiểm tra ngay cả trước khi viết mã (nó được gọi là TDD - Test Driven Development).

Tôi sẽ cung cấp cho bạn một ví dụ thực tế về cuộc sống: Gần đây tôi đã phải mã một NSArray được sắp xếp hỗ trợ "khoảng thời gian". Có nghĩa là, các mảng nên biết làm thế nào để chèn một khoảng thời gian và giữ cho nó được sắp xếp.

Ví dụ: mảng sẽ trông giống như sau: [1-3, 5-9, 12-50]. Trong ví dụ này có 3 khoảng thời gian trong mảng, và như bạn có thể thấy chúng được sắp xếp. Sau khi tôi viết lớp của tôi (tôi gọi nó là IntervalsArray), tôi HAD để viết các bài kiểm tra để đảm bảo rằng nó hoạt động chính xác và tôi sẽ không "phá vỡ" nếu tôi hoặc người khác thay đổi mã trong tương lai.

Dưới đây là một số xét nghiệm ví dụ (pseudo-code):

Test 1:

- Create a new IntervalsArray 
- Insert a new interval to the array 
- (TEST) make sure the array has 1 object in it 

thử nghiệm 2:

- Create a new IntervalsArray 
- Insert 2 intervals into the array: [1-3] and [5-9] 
- (TEST) make sure there are 2 items in the array 
- (TEST) make sure interval [1-3] comes before interval [5-9] 

Vào cuối tôi có một cái gì đó giống như 15 xét nghiệm để che mọi khía cạnh của mảng mới của tôi.

Đây là good unit-testing with Xcode tutorial.

Bạn cũng có thể viết các bài kiểm tra logic (phức tạp hơn các bài kiểm tra đơn vị) để kiểm tra giao diện người dùng của bạn. Đọc một chút về UIAutomation, đó là cách kiểm tra giao diện người dùng của Apple. Nó không hoàn hảo, nhưng nó khá tốt. Here's an excellent tutorial về việc này.

Nếu bạn tự coi mình là một lập trình viên giỏi, bạn nên viết đơn vị kiểm tra cho mã của mình.

+2

"Bạn nên luôn luôn kiểm tra đơn vị" - ngay cả đối với Hello World, phải không? (Không, không thực sự. Hãy ở mức hợp lý, OK?) –

+0

OK, đã chỉnh sửa câu trả lời của tôi. –

+0

@ EliGanem cảm ơn bạn. –

1

Bất cứ lúc nào bạn viết một ứng dụng có các lớp học, đó không phải là của riêng bạn. Đó là thời điểm tốt để thêm các bài kiểm tra đơn vị, để kiểm tra các lớp đó.

Tất cả các ứng dụng cơ bản nhất sẽ có các lớp riêng của chúng, do đó, hầu như luôn là ý tưởng tốt để kiểm tra đơn vị.

Nếu bạn đang tạo thư viện mà các lập trình viên khác sẽ sử dụng, hoặc bạn sẽ sử dụng trong nhiều dự án, những người đó sẽ luôn có các bài kiểm tra đơn vị.

Kiểm tra đơn vị giúp bạn tiết kiệm rất nhiều thời gian khi mọi thứ thay đổi, ví dụ, phiên bản hệ điều hành mới xuất hiện, tốt hơn bạn nên kiểm tra với các bài kiểm tra đơn vị để kiểm tra ứng dụng.

3

Viết kiểm tra đơn vị bất cứ lúc nào bạn viết mã mà bạn sẽ phải duy trì. Đó là, nếu bạn muốn refactor bất cứ điều gì - thay đổi mã nhưng giữ hành vi. Đó là khá nhiều mỗi bit của mã sản xuất.

Counterexample của "Hello, World" không phải là bận tâm với mã bạn định vứt bỏ. Một "giải pháp tăng đột biến" chỉ là để tìm ra cách bạn có thể tiếp cận một vấn đề. Khi bạn đã tìm ra, hãy vứt nó đi và bắt đầu lại. Chỉ có thời gian này, bạn bắt đầu với các bài kiểm tra.

Gọi TDD "cực đoan" khiến âm thanh không hợp lý và không thực tế. Trong thực tế, một khi bạn học TDD, nó tiết kiệm thời gian/tiền bạc.

Xem Unit Testing Example with OCUnit để biết ví dụ về cách thức hoạt động của TDD.

13

Các câu trả lời khác cho biết khi nhưng không thực sự cách, vì vậy hãy để tôi thêm câu trả lời.

Khi

Bất cứ khi nào bạn viết mã sản xuất mà bạn định giữ lại, bạn nên có Đơn vị kiểm tra. Việc đào tạo hữu ích nhất mà tôi thấy trên đây là 2 phần phim loạt sau:

Năm phút đầu tiên hoặc lâu hơn là chỉ giới thiệu để bạn có thể bỏ qua đến cuối đó.

Cách

Tôi đang sử dụng Xcode 7 với Swift.

Bắt đầu dự án mới và thêm Kiểm tra đơn vị.

Tôi gọi điện cho tôi MyProject. Nếu bạn mở nhóm MyProjectTests trong Project Navigator, bạn sẽ thấy rằng Xcode đã tạo ra một tệp Kiểm thử Đơn vị cho bạn gọi là MyProjectTest.swift.

enter image description here

Bạn có thể xóa tất cả các phương pháp dụ cho bây giờ và thêm một mới func để thử nghiệm phương pháp lớp học của riêng bạn. Hãy chắc chắn thêm dòng @testable import MyProject ở trên cùng. Nếu tên dự án của bạn có dấu cách, hãy thay thế dấu cách bằng dấu gạch dưới. (Ví dụ: "Dự án mẫu của tôi" sẽ sử dụng @testable import My_Example_Project.)

Tôi đang theo mẫu đặt tên là testMethodNameBeingTested_Senario_ExpectedBehavior. Tên Kiểm tra Đơn vị phải bắt đầu bằng "kiểm tra".

tôi sẽ làm một cái gì đó như thế này:

import XCTest 
@testable import MyProject 

class MyProjectTests: XCTestCase { 

    func testSum_TwoNumbers_ReturnsSum() { 
     // Arrange (set up the needed objects) 
     let myClass = MyClass() 

     // Act (run the method you want to test) 
     let sum = myClass.sum(1, 2) 

     // Assert (test that the behavior is as expected) 
     XCTAssertEqual(sum, 3) 

    } 
} 

Tất nhiên, việc xây dựng không thành công vì chúng tôi đã không được thêm vào lớp MyClass được nêu ra.

Thêm lớp học của bạn.

Tôi đang thêm tệp Swift vào MyProject được gọi là MyClass.

class MyClass { 

    func sum(a: Int, _ b: Int) -> Int { 
     return a + b 
    } 
} 

Nếu tôi thực sự tuân theo nguyên tắc TDD, tôi sẽ chỉ thêm tên hàm, không trả lại giá trị chính xác. Nhưng đối với ngắn gọn tôi sẽ chỉ cho toàn bộ phương pháp ngay bây giờ.

Nhấn nút kiểm tra bên cạnh Lớp đơn vị kiểm tra hoặc phương pháp để chạy lại kiểm tra và nó sẽ vượt qua.

Để xem nó không thành công (một phần quan trọng của Kiểm thử đơn vị), bạn có thể làm một cái gì đó như return 0 theo phương pháp sum của MyClass. Sau đó, bạn sẽ thấy những điều sau đây khi bạn chạy thử nghiệm:

enter image description here

Bạn có thể quay trở lại và sửa lỗi này và sau đó bổ sung thêm đơn vị xét nghiệm. Bạn cũng có thể tạo các tệp Kiểm tra Đơn vị khác cho các lớp khác nhau nếu bạn muốn. Chỉ cần nhấp chuột phải vào nhóm MyProjectTest trong Project Navigator và chọn "New File" Sau đó chọn Test Case Class.

enter image description here

liên quan

Xcode UI Test example