2013-08-21 48 views
30

Tôi sử dụng GHUnit. Tôi muốn đơn vị thử nghiệm phương pháp riêng tư và không biết làm thế nào để kiểm tra chúng. Tôi tìm thấy rất nhiều câu trả lời về lý do tại sao hoặc tại sao không thử nghiệm các phương pháp riêng tư. Nhưng không tìm thấy cách kiểm tra chúng.Kiểm tra đơn vị phương pháp riêng - mục tiêu C

Tôi không muốn thảo luận xem tôi có nên kiểm tra tư nhân hay không nhưng sẽ tập trung vào cách kiểm tra nó.

Ai đó có thể cho tôi ví dụ về cách thử nghiệm phương pháp riêng tư không?

+0

Giống như cách bạn kiểm tra phương pháp thông thường, vấn đề bạn đang gặp phải chính xác là gì? – Abizern

+0

Quyết định kiểm tra các phương pháp riêng tư là một phần của không gian vấn đề, không phải là một phần của không gian giải pháp. – dasblinkenlight

+0

@Abizern Nó nói 'Không thể nhìn thấy @interface cho myClass tuyên bố chọn 'myMethod'' – Geek

Trả lời

86

Phương pháp trong Mục tiêu-C không thực sự riêng tư. Thông báo lỗi bạn nhận được là trình biên dịch không thể xác minh rằng phương thức bạn đang gọi tồn tại vì nó không được khai báo trong giao diện công cộng.

Cách để giải quyết vấn đề này là hiển thị các phương thức riêng trong một thể loại lớp, cho trình biên dịch biết rằng các phương thức tồn tại.

Vì vậy, thêm một cái gì đó như thế này để đầu kiểm tra trường hợp tập tin của bạn:

@interface SUTClass (Testing) 

- (void)somePrivateMethodInYourClass; 

@end 

SUTClass là tên thực tế của lớp bạn đang viết bài kiểm tra cho.

Điều này sẽ làm cho phương thức riêng của bạn hiển thị và bạn có thể kiểm tra nó mà không có cảnh báo trình biên dịch.

+0

Nhưng làm điều này sẽ vạch trần các phương thức này. – Geek

+4

Nếu bạn làm điều đó trong lớp kiểm tra của bạn, bạn chỉ phơi bày các phương pháp cho các bài kiểm tra. – Abizern

+0

Nhưng bạn nói tôi đã viết điều này trong lớp tôi đang kiểm tra, không phải trong lớp kiểm tra. – Geek

3

Nếu phương pháp là riêng tư, bạn không bao giờ nên thử nghiệm phương pháp này.

Hãy nghĩ về điều này. Bạn nên kiểm tra hành vi và hợp đồng của các phương pháp thay vì thực hiện nội bộ

+1

Vì vậy, ... Nếu chúng tôi đã thực hiện nội bộ cần kiểm tra, điều đó có cho biết lỗ hổng thiết kế mà phương pháp đó thực sự được viết là công khai trong lớp khác, được giấu kín trong lớp ban đầu không? – Mazyod

+2

Nếu không, thì (nói một cách hời hợt) làm cho toàn bộ ứng dụng trong một lớp đơn với các phương thức riêng không nên được kiểm tra. – Mazyod

+0

hoàn hảo Mazyod, tôi hoàn toàn đồng ý với thông tin bổ sung của bạn – seufagner

7

Một chút trễ, nhưng tôi vừa lên tàu TDD.

Phương pháp cá nhân không được kiểm tra. Vì bạn viết các phương thức riêng để hỗ trợ các phương thức công khai của bạn, do đó kiểm tra các phương thức công khai của bạn gián tiếp kiểm tra các phương thức riêng hỗ trợ chúng.

Nguyên tắc "phương pháp riêng tư không được kiểm tra" được hỗ trợ theo nguyên tắc "khi bạn cần thử nghiệm phương pháp riêng tư, điều đó có nghĩa là bạn nên chuyển các phương pháp đó sang lớp riêng biệt", .

+9

Vì vậy, đây không phải là TDD sau đó nếu bạn đã viết một đoạn mã mà không cần viết bài kiểm tra đơn vị trước. Tuy nhiên, giả sử phương thức công khai của bạn sử dụng một vài phương thức riêng tư, khi nó thất bại, làm sao bạn biết được phương thức nào thất bại? –

4

Đồng ý với @Lord Zsolt

Cũng xin lưu ý tiếp theo (từ Test-Driven iOS Development ISBN-10: 0-321-77418-3, ISBN-13: 978-0-321-77418-7)

kiểm tra phương pháp Private

tôi thường được hỏi: “tôi có nên kiểm tra phương pháp riêng của tôi?” hoặc các câu hỏi có liên quan “Làm thế nào tôi nên kiểm tra phương pháp riêng của tôi?” Mọi người hỏi câu hỏi thứ hai đã giả định rằng sự câu trả lời đầu tiên là "Có" và hiện đang tìm kiếm cách để hiển thị các giao diện chính xác của lớp học trong các bộ thử nghiệm của họ.

Câu trả lời của tôi dựa trên việc quan sát một thực tế tinh tế: Bạn đã thử nghiệm mức độ riêng tư của mình. Bằng cách làm theo cách tiếp cận red-green – refactor phổ biến trong phát triển theo hướng thử nghiệm, bạn đã thiết kế các API công khai của các đối tượng của mình để thực hiện công việc những đối tượng đó cần phải làm.Với công việc được chỉ định bởi các bài kiểm tra — và việc tiếp tục thực hiện các bài kiểm tra đảm bảo bạn mà bạn chưa phá vỡ bất cứ điều gì — bạn được tự do tổ chức nội bộ đường ống dẫn nước của lớp học. Các phương pháp riêng tư của bạn là đã được thử nghiệm vì tất cả những gì bạn đang thực hiện là hành động tái cấu trúc mà bạn đã có các thử nghiệm.

Bạn không bao giờ nên kết thúc trong một tình huống nơi một phương pháp tư nhân chưa được kiểm tra hoặc không đầy đủ kiểm tra, bởi vì bạn tạo ra chúng chỉ khi bạn nhìn thấy một cơ hội để làm sạch thực hiện các phương pháp công cộng. Điều này đảm bảo rằng các phương pháp chỉ tồn tại để hỗ trợ hành vi công khai của lớp học và chúng phải được gọi trong khi thử nghiệm vì chúng chắc chắn là được gọi từ các phương thức công khai.

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